我希望能够在设置中定义存储库(最好是用户gradle.properties)

最终目标是这样的:

repositories {
    mavenCentral() // Can't/don't want to use this
    nexusCentral() // Can use these - on network Nexus server
    nexusSnapshot()
}

我将如何去做呢?同样,理想情况下,这会放在用户级别的gradle.properties文件中,因此我们不必在每个模块中都引用它。

这只是Maven提供的简单的Maven样式 Artifact 存储库,手动方式为:
maven {
        url "http://path/to/nexus"
    }

另一个要求是使用“发布”任务,该任务具有为存储库定义的凭据(Jenkins用来发布模块):
publishing {
...
maven {
            url "http://path/to/nexus"
            // Jenkins provides these as -P Gradle parameters.
            credentials {
                username = "${uploaderUser}"
                password = "${uploaderPassword}"
            }
        }

这些凭据对于普通用户是未知的,但是理想情况下,可以在Jenkin的gradle.properties中进行配置。我们不希望用户构建失败,因为他们无法解析凭据-他们甚至都不会使用“发布”任务。

最佳答案

您可以使用类似以下的内容:

   maven {
            credentials {
                username getCredentialsMavenUsername()
                password getCredentialsMavenPassword()
            }
            url 'xxxxx'
   }

/**
 * Returns the credential username used by Maven repository
 * Set this value in your ~/.gradle/gradle.properties with CREDENTIALS_USERNAME key
 * @return
 */
def getCredentialsMavenUsername() {
    return hasProperty('CREDENTIALS_USERNAME') ? CREDENTIALS_USERNAME : ""
}

/**
 * Returns the credential password used by Maven repository
 * Set this value in your ~/.gradle/gradle.properties with CREDENTIALS_PASSWORD key
 * @return
 */
def getCredentialsMavenPassword() {
    return hasProperty('CREDENTIALS_PASSWORD') ? CREDENTIALS_PASSWORD : ""
}
如果用户没有凭据,则脚本不会失败。

10-07 13:41