使用Nexus工件库进行多项目gradle构建

时间:2018-04-03 01:00:16

标签: gradle dependencies build.gradle nexus dependency-management

考虑以下多项目gradle构建,其中ProjectA依赖于ProjectB,而ProjectB依赖于ProjectC。依赖关系以compile project(':ProjectX')形式指定。这需要检查每个项目,以便构建ProjectA。

我想使用诸如Sonatype Nexus之类的工件仓库,以使开发人员的构建更简单,这样如果他们只在ProjectA上工作,那么他们就不需要检查从属项目,并且可以检索它们来自Nexus。同样,如果您正在处理依赖项目并且它们在本地检出,我希望它们可以构建而不是从Nexus中检索。

总之,依赖解析策略是:如果项目依赖并签出,则在本地构建,否则从Nexus检索

如何在gradle中实现这一目标?

1 个答案:

答案 0 :(得分:0)

我通过将依赖关系定义从compile project(':ProjectX')翻转到compile "my-group:ProjectX:version"来实现此功能,并使用以下依赖项替换解析策略:

configurations.all {
    resolutionStrategy.dependencySubstitution.all { DependencySubstitution dependency ->
        if (dependency.requested instanceof ModuleComponentSelector && dependency.requested.group == "my-group") {
            def proj = "${dependency.requested.module}"
            if (new File(rootDir, '../' + proj).exists()) {
                dependency.useTarget findProject(":${proj}")
            }
        }
    }
}