我希望能够在设置中定义存储库(最好是用户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 : ""
}
如果用户没有凭据,则脚本不会失败。