使用Gradle上传到Maven Central,避免未知属性错误

时间:2017-04-30 19:49:26

标签: gradle

我试图让我的第一个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凭证属性。

1 个答案:

答案 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'))
  }