我试图让我的第一个Gradle项目上传到Maven Central。我已经关注Sonatype's documentation并创建了uploadArchives
任务来生成元数据。
uploadArchives {
repositories {
mavenDeployer {
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
authentication(userName: ossrhUsername, password: ossrhPassword)
}
snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") {
authentication(userName: ossrhUsername, password: ossrhPassword)
}
...etc. etc.
该任务引用了两个属性," ossrhUsername"和{" ossrhPassword",我应该在gradle.properties
中定义;但是,如果我没有具有这些属性的gradle.properties
,则构建将失败并显示错误,即使对于非uploadArchives
任务也是如此。
$ gradlew test
无法获得未知财产' ossrhUsername'对于类型的对象 org.gradle.api.publication.maven.internal.deployer.DefaultGroovyMavenDeployer。
我希望构建成功(当然除uploadArchives
任务外),而不必在gradle.properties
文件中定义这些属性。
我该怎么做?
仅为Maven Central上传管理单独的pom.xml
会更简单吗?
编辑标识的potential duplicate是关于外部化凭据的位置。我的问题是如何确保Gradle构建仍然成功执行,尽管gradle.properties
中没有外部化凭据。我希望其他人能够克隆repo并执行Gradle,而无需定义OSSRH凭证属性。
答案 0 :(得分:4)
我没有直接引用属性,而是将属性名称作为String传递给findProperty
,从而消除了错误。 API documentation表示此方法为“Incubating”,但自2.13版本开始就存在。
repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
authentication(userName: findProperty('ossrhUsername'), password: findProperty('ossrhPassword'))
}
snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") {
authentication(userName: findProperty('ossrhUsername'), password: findProperty('ossrhPassword'))
}