多项目 gradle 使用 Nexus 工件存储库构建

Multi-project gradle build with Nexus artifact repository

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

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

综上所述,依赖解析策略是:如果项目依赖并检出,则在本地构建,否则从 Nexus 检索

如何在 gradle 中实现此目的?

我通过将依赖项定义从 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}")
            }
        }
    }
}