【发布时间】:2020-04-26 07:05:27
【问题描述】:
我有一个多模块 java 项目,我想在其中创建 jar(bin、source、javadoc),但我无法从子项目配置中的子项目获取变量。
这是我在根项目中的 build.gradle 文件:
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.
在子流程配置中,我还有其他任务,我可以轻松地从每个 subproejct 以及 project.name 访问 proejct.version,并且运行良好,当我将 "Main-Class": project.mainClassName 更改为 "Main-Class": "i.hate.mylife.SoMuch" 时,脚本运行完美.
在子项目中我也尝试以下方法
def mainClassName = "..."
project.ext{
mainClassName = "..."
}
gradle 有什么方法可以从 subproejct 配置中的 subproejcts 中获取 subproject 的变量吗?
在子项目配置中,我还尝试了以下操作:
project.ext.mainClassName
project.ext.get("mainClassName")
而且它们都不起作用,当我尝试运行它时,它说:
无法在额外的属性扩展上获取属性“mainClassName”,因为它确实如此 不存在
【问题讨论】:
-
为什么两个嵌套
subprojects? -
@ToYonos 复制粘贴错误
-
你为什么这么讨厌自己的生活?
-
@AndrewTobilko 我已经尝试解决这个小问题好几个小时了,我已经阅读了文档、许多文章、示例项目,但仍然没有解决方案。
-
@AndrewTobilko 为什么这么残忍?我刚刚发现自己陷入了同样的境地:基于子项目属性,从根项目到所有子项目动态地做一些事情。应该是微不足道的,但就像 OP 我似乎无法做到。