gradle上载了具有不同maven组和版本的多个子项目的存档

gradle上载了具有不同maven组和版本的多个子项目的存档,gradle,Gradle,我有以下build.gradle,它适用于单个子项目(如果复制粘贴,则适用于所有子项目): 这正是我想要它做的 尝试将其移动到根项目build.gradle不会成功,因为在调用uploadArchives时,子项目中定义的变量不会更新 如何解决这个问题?您需要先配置子项目,以便gradle在配置root build.gradle之前知道子项目变量。您可以使用以下命令强制自底向上配置: evaluationDependsOnChildren() 在具有单个根项目和两个子项目的项目中,可以在根项目

我有以下build.gradle,它适用于单个子项目(如果复制粘贴,则适用于所有子项目):

这正是我想要它做的

尝试将其移动到根项目build.gradle不会成功,因为在调用uploadArchives时,子项目中定义的变量不会更新


如何解决这个问题?

您需要先配置子项目,以便gradle在配置root build.gradle之前知道子项目变量。您可以使用以下命令强制自底向上配置:

evaluationDependsOnChildren()

在具有单个根项目和两个子项目的项目中,可以在根项目中创建一个公共gradle脚本,并将其应用于每个子项目

根项目: 格雷德尔先生

//nothing to see here
ext.commonVar = "subproject1"
apply from: rootProject.file('common.gradle')
ext.commonVar = "subproject2"
apply from: rootProject.file('common.gradle')
根项目:common.gradle

if (!project.hasProperty("commonVar")) {
    ext.commonVar = "unset"
}


task printCommonVar() {
    println commonVar
}
根项目:settings.gradle

rootProject.name = 'GradleGroupProject'

// Find the directories containing a "build.gradle" file in the root directory
// of the project. That is, every directory containing a "build.gradle" will
// be automatically the subproject of this project.

def subDirs = rootDir.listFiles(new FileFilter() {
    public boolean accept(File file) {
        if (!file.isDirectory()) {
            return false
        }
        if (file.name == 'buildSrc') {
            return false
        }
        return new File(file, 'build.gradle').isFile()
    }
});

subDirs.each { File dir ->
    include dir.name
}
子项目1:build.gradle

//nothing to see here
ext.commonVar = "subproject1"
apply from: rootProject.file('common.gradle')
ext.commonVar = "subproject2"
apply from: rootProject.file('common.gradle')
子项目2:build.gradle

//nothing to see here
ext.commonVar = "subproject1"
apply from: rootProject.file('common.gradle')
ext.commonVar = "subproject2"
apply from: rootProject.file('common.gradle')

ext.commonVar=“subproject2”
apply from:rootProject.file('common.gradle')
之间的顺序很重要。

将上载的归档文件移动到root build.gradle时,是否将其放置在子项目部分?我应该将其放置在哪里?我还读到,最好将此作为最后手段,那么还有其他方法吗?直接进入root build.gradle(在零缩进级别)。Gradle默认的评估顺序是首先评估根项目。我同意颠倒顺序是不理想的。它可能会破坏脚本中需要首先计算root的其他部分-但我还没有看到使用evaluationDependsOnChildren在实践中遇到的主要问题。我强烈建议您使用更新的“maven publish”插件,而不是
maven
插件-它可以更好地处理发布配置另一种方法是将所有公共配置(如groupID和version)移动到root build.gradle,并使用默认值(如moduleID的项目名称)。这样,您的上传存档不会在首先评估root build.gradle时抱怨缺少变量。