Java 从多模块gradle项目子项目配置中的子项目获取变量
我有一个多模块java项目,我想在其中创建jar(bin、source、javadoc),但我很难从子项目配置中的子项目中获取变量 这是根项目中的my build.gradle文件:Java 从多模块gradle项目子项目配置中的子项目获取变量,java,gradle,Java,Gradle,我有一个多模块java项目,我想在其中创建jar(bin、source、javadoc),但我很难从子项目配置中的子项目中获取变量 这是根项目中的my build.gradle文件: subprojects { /*...*/ jar { manifest { attributes( "Implementation-Title": project.name,
subprojects {
/*...*/
jar {
manifest {
attributes(
"Implementation-Title": project.name,
"Implementation-Version": project.version,
"Implementation-Vendor": "XXX",
"Main-Class": project.mainClassName
)
}
include '**/**'
}
/*...*/
}
这是build.gradle文件中的一个子项:
version = '1.2.0-SNAPSHOT'
ext {
mainClassName = "..."
}
/*...*/
当我想要运行构建脚本时,我得到了以下异常:
无法获取类型为的对象的未知属性“mainClassName”
org.gradle.api.java.archives.internal.DefaultManifest
在子流程配置中,我还有另外一个任务,可以轻松地从每个子流程访问proejct.version,也可以访问project.name,并且运行良好,当我将“Main Class”:project.mainClassName
更改为“Main Class”:“i.hate.mylife.SoMuch”
时,脚本运行良好
在子项目中,我还尝试了以下内容
def mainClassName = "..."
project.ext{
mainClassName = "..."
}
gradle中是否有任何方法可以从SubEJB配置中的SubEJB获取子项目的变量
在子项目配置中,我还尝试以下操作:
project.ext.mainClassName
project.ext.get("mainClassName")
当我试着运行它时,它们中没有一个起作用,它说:
无法在额外属性扩展上获取属性“mainClassName”,因为它
不存在
要覆盖子项目build.gradle中的额外属性,必须将所需任务(在本例中为
jar任务
)放入afterEvaluate
块中
根项目build.gradle:
subprojects {
apply plugin: 'java'
apply plugin: 'application'
ext {
// the property that should be overridden in suproject's build.gradle
mainClassName = ''
}
afterEvaluate {
jar {
manifest {
attributes(
"Implementation-Title": project.name,
"Implementation-Version": project.version,
"Implementation-Vendor": "XXX",
"Main-Class": mainClassName
)
}
include '**/**'
}
}
}
mainClassName = 'project.specific.Main'
ext.set("mainClassName", mainClassName)
子项目build.gradle:
subprojects {
apply plugin: 'java'
apply plugin: 'application'
ext {
// the property that should be overridden in suproject's build.gradle
mainClassName = ''
}
afterEvaluate {
jar {
manifest {
attributes(
"Implementation-Title": project.name,
"Implementation-Version": project.version,
"Implementation-Vendor": "XXX",
"Main-Class": mainClassName
)
}
include '**/**'
}
}
}
mainClassName = 'project.specific.Main'
ext.set("mainClassName", mainClassName)
为什么这两个嵌套的
子项目
?@ToYonos copy paste Error为什么你这么讨厌你的生活?@AndrewTobilko我试图解决这个琐碎的问题好几个小时了,我已经阅读了文档、许多文章、示例项目,但仍然没有解决方案。@AndrewTobilko为什么这么残忍?我发现自己也处于同样的境地:基于子项目属性,从根项目到所有子项目动态地做一些事情。应该是琐碎的,但就像OP一样,我似乎做不到。