gradle脚本,什么’;s直接dsl与由自定义函数调用的“;申请地点:”;
首先,私有maven repo中部署了一些常见脚本: 在目标项目中,build.gradlegradle脚本,什么’;s直接dsl与由自定义函数调用的“;申请地点:”;,gradle,apply,Gradle,Apply,首先,私有maven repo中部署了一些常见脚本: 在目标项目中,build.gradle subprojects { apply from: 'http://domain/repo/com/d/build/script/java-project/1.0/java-project-1.0.gradle' apply from: 'http://domain/repo/com/d/build/script/maven/1.0/maven-1.0.gradle' } 没关系 但是,
subprojects {
apply from: 'http://domain/repo/com/d/build/script/java-project/1.0/java-project-1.0.gradle'
apply from: 'http://domain/repo/com/d/build/script/maven/1.0/maven-1.0.gradle'
}
没关系强>
但是,
它将失败,并显示以下消息:
错误:无法添加任务“:javadocJar”,因为具有该名称的任务已存在
任务“:javadocJar”在脚本“java-project-1.0.gradle”中定义
我们有几个子项目
为什么?
顺便说一句:任何人都可以给我一个“申请来源:”的来源位置线索
很难自己定位它。问题是在latte的情况下,您将脚本多次应用于同一根项目。 这怎么可能?这很有趣,也有点棘手:
applyScript
定义为当前Gradle项目的扩展容器ext
上的闭包apply from:…
在org.gradle.api.plugins.PluginAware
接口上作为方法调用apply(Map)
处理,该接口是org.gradle.api.Project
接口的超级接口之一
- 这意味着每次编写
时,您都在对当前Gradle项目调用apply…
方法(其中指定了apply
)apply…
apply…
定义为闭包的一部分时,将应用标准委托
- 它在语义上与
this.apply…
指向作为根项目的封闭类/对象(此处不能是任何其他对象)默认情况下,此
项目
实例。:
ext.applyScript = { project, script, version ->
project.apply from: "..."
}
subprojects {
applyScript(it, 'java-project', '1.0')
applyScript(it, 'maven', '1.0')
}
ext.applyScript = { script, version ->
apply from: "..."
}
subprojects {
applyScript.resolveStrategy = Closure.DELEGATE_FIRST
applyScript.delegate = it
applyScript('java-project', '1.0')
applyScript('maven', '1.0')
}
ext.applyScript = { script, version ->
apply from: "..."
}
subprojects {
applyScript.resolveStrategy = Closure.DELEGATE_FIRST
applyScript.delegate = it
applyScript('java-project', '1.0')
applyScript('maven', '1.0')
}