Gradle 从不在 JCenter 存储库之前解析 Artifactory 以获取依赖项

Gradle never resolves Artifactory before JCenter repository for dependencies

我有一个 Gradle 用于 Java 项目的构建脚本。我已经设置了一个内部 Artifactory 存储库作为项目依赖项的远程。

项目编译时,我想Gradle先去Artifactory请求;如果那里失败了,接下来应该尝试将 JCenter 作为备份。

我在 Gradle 2.8 中使用 Gradle Artifactory 插件 v3.1.1。该插件在闭包中定义其 contextUrlpublish 存储库和 resolve 存储库:

artifactory {
    contextUrl = "${artifactoryContextUrl}"
    publish {
        repository {
            repoKey = 'Release'
            username = "${artifactoryUser}"
            password = "${artifactoryPassword}"
            maven = true
        }
    }
    resolve {
        repository {
            repoKey = 'repo'
            username = "${artifactoryUser}"
            password = "${artifactoryPassword}"
            maven = true
        }
    }
}

构建脚本和项目都定义了它们的存储库:

buildscript {
    repositories {
        maven {
            name 'Artifactory'
            url "${artifactoryContextUrl}repo"
            credentials {
                username = "${artifactoryUser}"
                password = "${artifactoryPassword}"
            }
        }
        jcenter()
    }
}

repositories {
    maven {
        name 'Artifactory'
        url "${artifactoryContextUrl}repo"
        credentials {
            username = "${artifactoryUser}"
            password = "${artifactoryPassword}"
        }
    }
    jcenter()
}

我不得不求助于这些重复定义 Artifactory 存储库的重复语句,因为我似乎无法找到一种方法来定义 artifactory 闭包并将其放置在构建脚本中,以便 Gradle 在尝试 JCenter 之前引用这个定义的 resolve 回购协议。

最好,该解决方案将解决 buildscriptrepositories 闭包中的重复定义,但我似乎不太可能在之前引用 artifactory 闭包中的属性Gradle-Artifactory 插件已安装。

  1. 您不需要在脚本的主要部分同时配置 artifactory {} 配置和 repositories 配置。在 buildscript 中使用 repositories 指向您的 Artifactory 实例,然后在主要部分使用 artifactory{} DSL。
  2. 您不需要在脚本中配置 jcenter,Artifactory 默认代理它。您不需要 "back up" Artifactory 与 JCenter,因为 JCenter 中存在的任何内容都可以从 Artifactory 解析。