我对gradle很新,我喜欢这个构建系统的表现力。然而有些事情看起来很棘手。
考虑配置代码:
project(":A") {
apply plugin: "X"
apply plugin: "Y"
someVar = "aa"
dependencies {
compile project(":C1")
compile project(":C2")
compile project(":C3")
}
}
project(":B") {
apply plugin: "X"
apply plugin: "Z"
someVar = "bb"
dependencies {
compile project(":C1")
compile project(":C2")
}
}
我想让这个配置尽可能干。我天真地试图做的事情:
void myProjectType(someVarValue){
apply plugin: "X"
someVar = someVarValue
dependencies {
compile project(":C1")
compile project(":C2")
}
}
project(":A") {
myProjectType("aa");
apply plugin: "Y"
dependencies {
compile project(":C3")
}
}
project(":B") {
myProjectType("bb");
apply plugin: "X"
}
对我来说很好看,但它并没有在gradle中工作。有什么建议,怎么做正确的方法?
如果找到问题的一半解决方案,如下所示:
project(":A"){
...
apply from: "${rootProject.projectDir}/gradle-config/config.gradle"
...
}
然而,这种方法并不允许对应用的'进行显式参数化。 part(someVarValue作为前一个例子的参数)
答案 0 :(得分:1)
您需要将project
的实例传递给方法 - 否则gradle将不知道配置了什么。所以它将是:
subprojects {
apply plugin: 'java'
}
project(':A') {
apply plugin: 'war'
common(project, 'aa')
dependencies {
compile project(':C3')
}
}
project(':B') {
apply plugin: 'groovy'
common(project, 'bb')
}
def common(p, value) {
p.with {
ext.someVar = value
dependencies {
compile project(':C1')
compile project(':C2')
}
}
}
['A', 'B'].each { n ->
configure(project(":$n")) { p ->
task printVar << {
println "project -> $p.name, var -> $someVar"
}
task printDeps << {
p.configurations.compile.each { d ->
println "project -> $p.name, dependency -> $d"
}
}
}
}
运行gradle printDeps printVar
以验证其是否正常工作。完整演示是here。如有任何问题,请随时询问。