![](/img/trans.png)
[英]How to configure every Kotlin project in Gradle multi-project build?
[英]How to use variables in a multi-project gradle build system?
我有一个用 gradle 管理的多项目结构。 所有 java 子项目都有这个jar
块:
def main_class = "foo.Main"
jar {
manifest {
attributes 'Main-Class': main_class
}
}
所以我决定将jar块移到根项目中, def main_class
中只有def main_class
,但是无论我如何定义main_class
变量,它都不起作用。 我也试过project.ext
和properties {}
。
我有一个名为dist
的任务,它与project.ext
一起工作:
根项目:
subprojects {
task dist(dependsOn: jar) << {
copy {
from('build/libs') {
include (build_jar)
}
into('.')
rename(build_jar, app_jar)
}
}
}
一个子项目:
project.ext {
build_jar = "..."
app_jar = "..."
}
我如何定义一个像dist
任务一样与jar
一起使用的变量?
你可以这样做:
ext {
main_class = 'com.Main'
}
subprojects {
apply plugin: 'java'
jar {
manifest {
attributes 'Main-Class': main_class
}
}
}
在PROJECT_ROOT/build.gradle
文件中。
要覆盖子项目的 build.gradle 中的额外属性,您必须将所需的任务(在本例中为jar task
)放在afterEvaluate
块中。
根项目 build.gradle:
subprojects {
apply plugin: 'java'
apply plugin: 'application'
ext {
// the property that should be overridden in suproject's build.gradle
main_class = ''
}
afterEvaluate {
jar {
manifest {
attributes 'Main-Class': main_class
}
}
}
}
子项目 build.gradle:
mainClassName = 'project.specific.Main'
ext.set("main_class", mainClassName)
// you could also use this notation, but I prefer the first one
// since it is more clear on what it is doing
//main_class = mainClassName
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.