Gradle 如何在目标文件夹中的梯度复制任务中使用参数?
鉴于gradle中的以下任务,开发人员将通过以下方式启动一个新模块:Gradle 如何在目标文件夹中的梯度复制任务中使用参数?,gradle,Gradle,鉴于gradle中的以下任务,开发人员将通过以下方式启动一个新模块: gradle initModule -PmoduleName=derp task initModule(type: Copy) { description "Initialize an empty module based on the template. Usage: gradle initModule -P moduleName=derp" onlyIf { project.hasProperty("m
gradle initModule -PmoduleName=derp
task initModule(type: Copy) {
description "Initialize an empty module based on the template. Usage: gradle initModule -P moduleName=derp"
onlyIf { project.hasProperty("moduleName") }
from "$rootDir/modules/template"
into "$rootDir/modules/$moduleName"
}
我无法运行gradle,因为在评估期间没有定义moduleName,尽管我希望“onlyIf”可以这样做
为了解决这个问题,我将其分配给保护块中的一个局部定义变量:
def modName = ""
if (!project.hasProperty("moduleName")) {
logger.error("Invalid moduleName : It can't be")
} else {
modName = moduleName
}
最后使用新变量在配置阶段生存
这样做对吗?只是感觉不对
另外,如果我使用一个规则来让它更优雅:
tasks.addRule("Pattern: initModule_<mod name>") { String taskName ->
if (taskName.startsWith("initModule_")) {
def params = taskName.split('_');
task(taskName) {
doLast {
project.ext.moduleName = params.tail().head()
tasks.initModule.execute()
}
}
}
}
tasks.addRule(“模式:initModule_”){String taskName->
if(taskName.startsWith(“initModule_382;”)){
def params=taskName.split(“”);
任务(任务名称){
多拉斯特{
project.ext.moduleName=params.tail().head()
tasks.initModule.execute()
}
}
}
}
moduleName不会被传递(即使我将其更改为finalizedBy)
非常感谢您的帮助。因为您已经发现该属性在配置阶段不可用 但是可以通过使用
into "$rootDir/modules/" + project.property("moduleName")
而不是
into "$rootDir/modules/$moduleName"