Gradle 替代主项目中定义的渐变选项

Gradle 替代主项目中定义的渐变选项,gradle,Gradle,我正在为所有子项目添加上载存档目录 uploadArchives { repositories { flatDir {dirs '../REPO'} } } 现在我需要为一个子项目指定一个不同的目录 我发现这样做会增加列表,但我想替换目录。我知道我可以使用subprojects.findAll,但我也需要覆盖其他地方的设置 免责声明:我的问题可能听起来很愚蠢,但我从几周前开始使用gradle,必须承认,我对它几乎一无所知。我喜欢它,它工作得很好,但阅读手册不是一个

我正在为所有
子项目添加上载存档目录

uploadArchives {
    repositories {
       flatDir {dirs '../REPO'}
    }
}
现在我需要为一个子项目指定一个不同的目录

我发现这样做会增加列表,但我想替换目录。我知道我可以使用
subprojects.findAll
,但我也需要覆盖其他地方的设置


免责声明:我的问题可能听起来很愚蠢,但我从几周前开始使用gradle,必须承认,我对它几乎一无所知。我喜欢它,它工作得很好,但阅读手册不是一个选项(我只是一个BFU,我宁愿在阅读之前切换到makefile)。

通常,最干净的解决方案是从一开始就以正确的方式配置东西。有几种方法可以做到这一点。例如:

rootProject/build.gradle:

configure(subprojects - project(":foo")) {
    uploadArchives {
        repositories {
            flatDir {dirs '../REPO'}
        }
    }
}

project(":foo") {
    uploadArchives {
        repositories {
            flatDir {dirs '../OTHER'}
        }
    }
}
uploadArchives.repositories[0].dirs = ["../OTHER"]    
或者,您可以有两个辅助脚本
gradle/repoA.gradle
gradle/repoB.gradle
,每个子项目构建脚本都将应用相应的脚本,并从“$rootDir/gradle/repoX.gradle”
应用

最后,重写该值可能也会起作用(未经测试):

rootProject/subproject/build.gradle:

configure(subprojects - project(":foo")) {
    uploadArchives {
        repositories {
            flatDir {dirs '../REPO'}
        }
    }
}

project(":foo") {
    uploadArchives {
        repositories {
            flatDir {dirs '../OTHER'}
        }
    }
}
uploadArchives.repositories[0].dirs = ["../OTHER"]    

附言:现在去学一些格律。:-)

它是有效的,
uploadArchives.repositories.flatDir.dirs
,有一天我可能会理解。现在,我正在主控中配置它,但是这个覆盖非常方便,而且可能更干净。我已经花了几个小时阅读了关于Gradle的文章,但我需要的是一种调试器,它可以向我展示Gradle的结构。不管怎样,即使没有任何线索,它也比maven工作得更好。