Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从多模块gradle项目子项目配置中的子项目获取变量_Java_Gradle - Fatal编程技术网

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

Java 从多模块gradle项目子项目配置中的子项目获取变量,java,gradle,Java,Gradle,我有一个多模块java项目,我想在其中创建jar(bin、source、javadoc),但我很难从子项目配置中的子项目中获取变量 这是根项目中的my build.gradle文件: subprojects { /*...*/ jar { manifest { attributes( "Implementation-Title": project.name,

我有一个多模块java项目,我想在其中创建jar(bin、source、javadoc),但我很难从子项目配置中的子项目中获取变量

这是根项目中的my 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

在子流程配置中,我还有另外一个任务,可以轻松地从每个子流程访问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一样,我似乎做不到。