Gradle Release System任务 - 在子项目上调用uploadArchives

时间:2013-07-11 20:43:29

标签: continuous-integration gradle

为了发布我的系统,我正在创建一个发布者项目,为许多其他项目调用uploadArchives。

在我的项目中,我有以下文件:

settings.gradle

include '../proj-a',  '../proj-b'

的build.gradle

task releaseSystem() {
     // what goes here?
}

releaseSystem任务的内容应该是什么,我可以调用gradle releaseSystem并让它为每个子项目运行uploadArchives?

我尝试了很多选项,但到目前为止还没有成功。

感谢您提供的任何见解。

ANSWER

Gradle为我的问题提供的优雅解决方案给我留下了深刻的印象。这是我的最终解决方案(正如Peter在下面指出的那样):

settings.gradle

include 'proj-a',  'proj-b'
project (':proj-a').projectDir = new File(settingsDir, '../proj-a')
project (':proj-b').projectDir = new File(settingsDir, '../proj-b')

的build.gradle

task releaseSystem() {
    dependsOn {
        [
            subprojects.build,
            subprojects.uploadArchives
        ]
    }
}

请注意,由于我的存储库是maven存储库,当我最初在settings.gradle中包含“../proj-a”时,它生成了带有artifactId ../proj-a的poms,这是无效的。我必须将settings.gradle更改为上面的格式,以便系统正确地将poms放在一起,并使uploadArchives任务成功完成。

1 个答案:

答案 0 :(得分:2)

假设所有子项目都有uploadArchives任务:

task releaseSystem {
    dependsOn { subprojects.uploadArchives }
}

请注意,这不会运行子项目的测试。