Gradle中的干式项目配置
我对gradle很陌生,我喜欢这个构建系统的表现力。然而,有些事情看起来相当棘手 考虑配置代码:Gradle中的干式项目配置,gradle,Gradle,我对gradle很陌生,我喜欢这个构建系统的表现力。然而,有些事情看起来相当棘手 考虑配置代码: project(":A") { apply plugin: "X" apply plugin: "Y" someVar = "aa" dependencies { compile project(":C1") compile project(":C2") compile project(":C3") } }
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"
}
对我来说很好,但在格拉德尔不起作用。有什么建议吗,如何正确地做
如果找到了一半问题的解决方案,如下所示:
project(":A"){
...
apply from: "${rootProject.projectDir}/gradle-config/config.gradle"
...
}
但是,这种方法不允许“应用”部分的显式参数化(上一示例中的参数为someVarValue)您需要将
项目的实例传递给该方法,否则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"
}
}
}
}
子项目{
应用插件:“java”
}
项目(“:A”){
应用插件:“战争”
普通(项目“aa”)
依赖关系{
编译项目(“:C3”)
}
}
项目(':B'){
应用插件:“groovy”
通用(项目“bb”)
}
def公用(p,值){
p、 与{
ext.someVar=value
依赖关系{
编译项目(“:C1”)
编译项目(“:C2”)
}
}
}
['A','B'].每个{n->
配置(项目(“:$n”){p->
任务printVar