gpt4 book ai didi

java - 从多模块gradle项目的子项目配置中的子项目获取变量

转载 作者:行者123 更新时间:2023-12-01 13:22:17 26 4
gpt4 key购买 nike

我有一个多模块 java 项目,我想在其中创建 jar(bin、source、javadoc)并且我无法从子项目配置中的 subproejcts 获取变量。

这是我在根项目中的 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 = "..."
}
/*...*/

当我想运行构建脚本时,出现以下异常:

Could not get unknown property 'mainClassName' for object of type 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 获取子项目变量?

在子项目配置中,我还尝试以下操作:
project.ext.mainClassName
project.ext.get("mainClassName")

而且它们都不起作用,当我尝试运行它时,它说:

Cannot get property 'mainClassName' on extra properties extension as it does not exist

最佳答案

要覆盖子项目的 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
mainClassName = ''
}

afterEvaluate {
jar {
manifest {
attributes(
"Implementation-Title": project.name,
"Implementation-Version": project.version,
"Implementation-Vendor": "XXX",
"Main-Class": mainClassName
)
}
include '**/**'
}
}
}

子项目 build.gradle:
mainClassName = 'project.specific.Main'
ext.set("mainClassName", mainClassName)

关于java - 从多模块gradle项目的子项目配置中的子项目获取变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49111259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com