当前位置: 首页 > 知识库问答 >
问题:

允许用户为Cordova插件指定Gradle依赖项

傅志用
2023-03-14

现在我的plugin.xml中包含了以下内容:

<hook type="before_plugin_install" src="modifyPluginXML.js" />
<framework src="resources/custom.gradle" custom="true" type="gradleReference"/>
<framework src="$TO_BE_DEFINED_PACKAGE" type="gradleReference"/>

我有一个钩子,它接受命令行参数,并用参数中提供的包路径/名称替换plugin.xml中的$to_be_defined_package。

下面是ModifyPluginXml.js钩子:

module.exports = function(context) {
var Q = context.requireCordovaModule('q');
var deferral = new Q.defer();
var fs = require('fs'),
    xml2js = require('xml2js'),
    path = require('path'),
    util = require('util');

    var parser = new xml2js.Parser({explicitArray:false});
    var cb = function(data){
        console.log("plugin.xml updated");
        deferral.resolve();
    }

    fs.readFile(__dirname + '/plugin.xml', function(err, data) {
        parser.parseString(data, function (err, result) {
            //console.log(util.inspect(result, false, null));

            var externalDep = "";
            for (var i = 0; i < process.argv.length;i++){
                if(process.argv[i].indexOf('EXTERNAL_DEP') >= 0){
                    externalDep = process.argv[i].replace("EXTERNAL_DEP=", "");
                    console.log(externalDep);
                }
            }
            result.plugin.platform.framework[1]['$'].src = externalDep;
            var builder = new xml2js.Builder();
            var xml = builder.buildObject(result);
            var filepath = path.normalize(path.join(__dirname, '/plugin.xml'));
            fs.writeFile(filepath, xml, cb);
        });
    });
     return deferral.promise;
 }

我遇到的问题是cordova似乎并不关心新的plugin.xml。它仍然使用旧的plugin.xml的框架标记。

在generate build.gradle文件中,我仍然看到以下内容:

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    // SUB-PROJECT DEPENDENCIES START
    debugCompile project(path: "CordovaLib", configuration: "debug")
    releaseCompile project(path: "CordovaLib", configuration: "release")
    compile "$TO_BE_DEFINED_PACKAGE"
    // SUB-PROJECT DEPENDENCIES END
}

因此,即使plugin.xml使用before_plugin_install钩子正确更新,但cordova使用旧值生成build.gradle文件。

有没有人有什么建议,或者我可以走什么不同的路?

共有1个答案

严宏旷
2023-03-14

您不必在plugin.xml中写入,因为只有在插件安装时才能读取。

如果您想要编辑gradle引用,可以在platforms/android/build.gradle文件中编写,这是plugin.xml中的引用复制的地方。

无论如何,我不认为是一个好主意,让用户选择的版本使用,您,作为开发插件,应该选择的版本,您测试和您确定的工作良好,使用不同的版本可能会使插件不能正常工作或根本不工作。

 类似资料:
  • 在创建一个带有 shade 插件的 jar 之后,我在其中对某个依赖项进行了着色,生成了 reduce-dependencies.pom,我想在不同的项目中使用它。 我无法理解如何做到这一点,因为只有完整的原始pom才能安装(并在以后部署)到我的.m2存储库中。我已经阅读并无法在这里找到我的答案,这里(OrangeDog在评论中询问它并且没有回答)和这里。 如何在不同的项目中使用简化的pom而不是

  • 我试图为其他gradle项目使用的自定义gradle插件构建一个jar。我使用java编写插件。我有一个问题,包括我的jar中的依赖项。如果我使用下面的代码构建jarbuild.gradle 在一个项目中应用插件时,我得到了一个针对guava类的NoClassDefFound异常。如果我在 它表示未找到Id为“my Plugin”的。如何在gradle插件jar中包含依赖项?

  • 在另一个项目中,我使用/应用这个插件: 但是如何从MyGradlePlugin.groovy中的apply方法中迭代公共依赖项并打印它们的坐标(artifactId、groupId、version)?

  • 我是新手。使用Gradle3.5,我试图从java项目创建一个war构建。下面是我的分级文件内容。 当我生成war构建时,它会在目录下添加jar文件。但是,除了这些jar文件之外,我还需要组中的jar文件和任务中生成的jar文件。我怎样才能做到这一点呢?

  • TL;DR两个gradle插件使用相同依赖项的不同版本,在调用其中一个插件时会导致编译错误。 > 我有一个使用Gradle4编译的Java项目。十、 该项目依赖于两个插件:gradle-jaxb-plugin和serenity-gradle-plugin。 两个插件共享一个依赖项,guice。 我需要升级一个插件(serenety)。升级会导致调用jaxb插件时发生冲突。 我做了一些调查和谷歌搜索