簡體   English   中英

發布到 Sonatype 時出錯,因為“repositoryUrl”為空

[英]Error publishing to Sonatype because "repositoryUrl" is null

我一直在嘗試將項目發布到 Sonatype 的存儲庫,但出現錯誤,而且我無法在線找到解決方案。

我的build.gradle.kts文件中有以下publishing塊:

publishing {
    publications {
        create<MavenPublication>("mavenJava") {
            pom {
                name.set("Keen")
                description.set("A genetic algorithm framework for Kotlin")
                url.set("https://github.com/r8vnhill/keen")
                licenses {
                    license {
                        name.set("Attribution 4.0 International (CC BY 4.0)")
                        url.set("https://creativecommons.org/licenses/by/4.0/legalcode")
                    }
                }
            }
            groupId = "cl.ravenhill"
            artifactId = "keen"
            version = projectVersion
            from(components["java"])
        }
    }
    repositories {
        maven {
            name = "sonatype"
            if (version.toString().endsWith("SNAPSHOT")) {
                maven("https://s01.oss.sonatype.org/content/repositories/snapshots/") {
                    name = "ossrh"
                    credentials(PasswordCredentials::class)
                }
            } else {
                maven("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/") {
                    name = "ossrh"
                    credentials(PasswordCredentials::class)
                }
            }
        }
    }
}

我得到的錯誤是:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':publishMavenJavaPublicationToSonatypeRepository'.
> Failed to publish publication 'mavenJava' to repository 'sonatype'
   > Cannot invoke "java.net.URI.getScheme()" because "repositoryUrl" is null

知道會發生什么嗎?

名為“sonatype”的存儲庫沒有 URL。

假設版本是快照版本,例如1.2.3-SNAPSHOT ,你寫的是

repositories { 
  maven {
    name = "sonatype"
    
    maven("https://s01.oss.sonatype.org/content/repositories/snapshots/") { 
      name = "ossrh"
      credentials(PasswordCredentials::class)
    } 
  }
}

這也相當於

repositories { 
  maven {
    name = "sonatype"
  }
  maven("https://s01.oss.sonatype.org/content/repositories/snapshots/") { 
    name = "ossrh"
    credentials(PasswordCredentials::class)
  } 
}

所以存儲庫“sonatype”有一個名稱,但沒有 URL。

Gradle 將為每個定義的存儲庫創建一個發布任務,即使該定義無效(無法提前知道)。 如果你運行了 Gradle 任務

./gradlew publishMavenJavaPublicationToOssrhRepository

它會成功的。

要更正此問題,請刪除“sonatype”存儲庫。 如果您在單獨的變量中定義目標 URL,也會更清楚。

val ossrhRepositoryUrl = if (version.toString().endsWith("SNAPSHOT")) {
  "https://s01.oss.sonatype.org/content/repositories/snapshots/"
} else {
  "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
}

publishing {
  repositories {
    maven(ossrhRepositoryUrl) {
      name = "ossrh"
      credentials(PasswordCredentials::class)
    }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM