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

bdk*_*her 4 gradle

我正在尝试将我的第一个Gradle项目上载到Maven Central。为此,我遵循了Sonatype的文档,并创建了一个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.
Run Code Online (Sandbox Code Playgroud)

该任务引用了两个属性,“ ossrhUsername”和“ ossrhPassword”,我应该在其中定义它们gradle.properties;但是,如果我没有gradle.properties这些属性,则即使对于非uploadArchives任务,构建也会因错误而失败。

$ gradlew test
Run Code Online (Sandbox Code Playgroud)

无法获得类型为org.gradle.api.publication.maven.internal.deployer.DefaultGroovyMavenDeployer的对象的未知属性'ossrhUsername'。

我希望构建成功(uploadArchives当然除了任务之外)而不必在gradle.properties文件中定义这些属性。

我该怎么做呢?

仅为pom.xmlMaven Central上传管理一个单独的目录会更简单吗?

编辑识别出的潜在重复项是关于将凭证外部化的地方。我的问题是,即使没有将凭据外部化,如何确保Gradle构建仍能成功执行gradle.properties。我希望其他人能够克隆存储库并执行Gradle,而不必定义OSSRH凭证属性。

bdk*_*her 5

我没有直接引用属性,而是将属性名称作为字符串传递给findProperty,从而消除了错误。该API文档表明这种方法是“孵化”,但因为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'))
  }
Run Code Online (Sandbox Code Playgroud)