现在我的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文件。
有没有人有什么建议,或者我可以走什么不同的路?
您不必在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插件时发生冲突。 我做了一些调查和谷歌搜索