大佬教程收集整理的这篇文章主要介绍了将 kotlin 多平台库发布到 Maven Central(InvalidMavenPublicationException multiple artifacts with the same ...),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
由于 Jcenter 即将关闭,我正在尝试将我的库迁移到 Maven Central。我已经搜索了很多找到任何工作脚本,但没有运气。有 official docs,但这就像一个笑话,只是告诉将 @H_549_3@maven-publish 插件放入 gradle 脚本中,瞧,就是这样。
目前我收到错误:
Caused by: org.gradle.API.publish.maven.InvalIDMavenPublicationException: InvalID publication 'Js': multiple artifacts with the IDentical extension and classifIEr ('jar','sources').
我的脚本如下所示:
plugins {
ID("kotlin-multiplatform")
ID("org.jetbrains.dokka") version "1.4.0-rc"
`maven-publish`
signing
}
kotlin {
sourceSets {
jvm()
Js() {
nodeJs()
browser()
}
linuxX64()
linuxArm64()
mingwX64()
macosX64()
iosArm64()
iosX64()
val commonMain by getTing {
dependencIEs {
}
}
val commonTest by getTing {
dependencIEs {
implementation(kotlin("test-common"))
implementation(kotlin("test-Annotations-common"))
}
}
val Jsmain by getTing {
dependencIEs {
}
}
val JsTest by getTing {
dependencIEs {
implementation(kotlin("test-Js"))
}
}
val jvmMain by getTing {
dependencIEs {
}
}
val jvmTest by getTing {
dependencIEs {
implementation(kotlin("test"))
implementation(kotlin("test-junit"))
}
}
val nativeMain by creaTing {
dependsOn(commonMain)
dependencIEs {
}
}
val linuxX64Main by getTing {
dependsOn(nativeMain)
}
val linuxArm64Main by getTing {
dependsOn(nativeMain)
}
val mingwX64Main by getTing {
dependsOn(nativeMain)
}
val macosX64Main by getTing {
dependsOn(nativeMain)
}
val iosArm64Main by getTing {
dependsOn(nativeMain)
}
val iosX64Main by getTing {
dependsOn(nativeMain)
}
}
}
tasks {
create<Jar>("javadocJar") {
dependsOn(dokkaJavadoC)
archiveClassifIEr.set("javadoc")
from(dokkaJavadoc.get().outputDirectory)
}
dokkaJavadoc {
println("Dokka !")
dokkasourceSets {
create("commonMain") {
displayname = "common"
platform = "common"
}
}
}
}
// Publishing
val fis = fileinputStream("local.propertIEs")
val propertIEs = PropertIEs().apply {
load(fis)
}
val ossUser = propertIEs.getProperty("osS.User")
val osspassword = propertIEs.getProperty("oss.password")
extra["signing.keyID"] = propertIEs.getProperty("signing.keyID")
extra["signing.password"] = propertIEs.getProperty("signing.password")
extra["signing.secretKeyRingfile"] = propertIEs.getProperty("signing.secretKeyRingfile")
val libraryVersion: String by project
val publishedGroupID: String by project
val artifactname: String by project
val libraryname: String by project
val libraryDescription: String by project
val siteUrl: String by project
val gitUrl: String by project
val licensename: String by project
val licenseUrl: String by project
val developerOrg: String by project
val developername: String by project
val developerEmail: String by project
val developerID: String by project
project.group = publishedGroupID
project.version = libraryVersion
signing {
sign(publishing.publications)
}
publishing {
publications.withType(MavenPublication::class) {
groupID = publishedGroupID
artifactID = artifactname
version = libraryVersion
artifact(tasks["javadocJar"])
artifact(tasks["sourcesJar"])
pom {
name.set(libraryName)
description.set(libraryDescription)
url.set(siteUrl)
licenses {
license {
name.set(licenseName)
url.set(licenseUrl)
}
}
developers {
developer {
ID.set(developerID)
name.set(developerName)
email.set(developerEmail)
}
}
organization {
name.set(developerOrg)
}
scm {
connection.set(gitUrl)
developerConnection.set(gitUrl)
url.set(siteUrl)
}
}
}
repositorIEs {
maven("https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
name = "sonatype"
credentials {
username = ossUser
password = osspassword
}
}
}
}
我还发现此 reddit topic 没有解决方案,此 article 不起作用,以及许多其他问题。如何发布到 bintray 的材料有很多,但现在都无关紧要
似乎问题出在此行 artifact(tasks["sourcesJar"])
中,因为此任务已包含在内。
在这里,我想放置用于将 kotlin 多平台库上传到 Maven Central 的工作脚本。
首先,我们需要注册 Sonatype 帐户,验证我们的域等,这里是一个 fresh article with detailed steps。
那么您的项目脚本 build.gradle.kts
可能如下所示:
import java.io.FileInputStream
import java.util.Properties
import org.gradle.api.publish.PublishingExtension
plugins {
id("kotlin-multiplatform")
id("org.jetbrains.dokka") version "1.4.0-rc"
id("io.codearte.nexus-staging") version "0.22.0"
`maven-publish`
signing
}
enum class OS {
LINUX,WINDOWS,MAC
}
fun getHostOsName(): OS =
System.getProperty("os.name").let { osName ->
when {
osName == "Linux" -> Os.LINUX
osName.startsWith("Windows") -> Os.WINDOWS
osName.startsWith("Mac") -> Os.MAC
else -> throw GradleException("Unknown OS: $osName")
}
}
kotlin {
sourceSets {
jvm()
js() {
browser()
nodejs()
}
when (getHostOsName()) {
Os.LINUX -> {
linuxX64()
linuxArm64()
}
Os.WINDOWS -> {
mingwX64()
}
Os.MAC -> {
macosX64()
iosArm64()
iosX64()
}
}
val commonMain by getTing {
dependencies {
implementation(kotlin("stdlib-common"))
implementation(Libs.olekdia.common)
}
}
val commonTest by getTing {
dependencies {
implementation(kotlin("test-common"))
implementation(kotlin("test-Annotations-common"))
}
}
val jvmMain by getTing {
dependencies {
}
}
val jvmTest by getTing {
dependencies {
implementation(kotlin("test"))
implementation(kotlin("test-junit"))
}
}
val jsmain by getTing {
dependencies {
}
}
val nativeMain by creaTing {
dependsOn(commonMain)
}
when (getHostOsName()) {
Os.LINUX -> {
val linuxX64Main by getTing {
dependsOn(nativeMain)
}
val linuxArm64Main by getTing {
dependsOn(nativeMain)
}
}
Os.WINDOWS -> {
val mingwX64Main by getTing {
dependsOn(nativeMain)
}
}
Os.MAC -> {
val macosX64Main by getTing {
dependsOn(nativeMain)
}
val iosArm64Main by getTing {
dependsOn(nativeMain)
}
val iosX64Main by getTing {
dependsOn(nativeMain)
}
}
}
}
}
tasks {
create<Jar>("javadocJar") {
dependsOn(dokkaJavadoC)
archiveClassifier.set("javadoc")
from(dokkaJavadoc.get().outputDirectory)
}
dokkaJavadoc {
dokkasourceSets {
create("commonMain") {
displayName = "common"
platform = "common"
}
}
}
}
//--------------------------------------------------------------------------------------------------
// Publishing
//--------------------------------------------------------------------------------------------------
val fis = FileInputStream("local.properties")
val properties = Properties().apply {
load(fis)
}
val ossUser = properties.getProperty("osS.User")
val osspassword = properties.getProperty("oss.password")
extra["signing.keyId"] = properties.getProperty("signing.keyId")
extra["signing.password"] = properties.getProperty("signing.password")
extra["signing.secretKeyRingFile"] = properties.getProperty("signing.secretKeyRingFile")
val libraryVersion: String by project
val publishedGroupId: String by project
val artifactName: String by project
val libraryName: String by project
val libraryDescription: String by project
val siteUrl: String by project
val gitUrl: String by project
val licensename: String by project
val licenseUrl: String by project
val developerOrg: String by project
val developerName: String by project
val developerEmail: String by project
val developerId: String by project
project.group = publishedGroupId
project.version = libraryVersion
signing {
sign(publishing.publications)
}
afterEvaluate {
configure<PublishingExtension> {
publications.all {
val mavenPublication = this as? MavenPublication
mavenPublication?.artifactId =
"${project.namE}${"-$name".takeUnless { "kotlinMultiplatform" in name }.orEmpty()}"
}
}
}
publishing {
publications.withType(MavenPublication::class) {
groupId = publishedGroupId
artifactId = artifactName
version = libraryVersion
artifact(tasks["javadocJar"])
pom {
name.set(libraryName)
description.set(libraryDescription)
url.set(siteUrl)
licenses {
license {
name.set(licenseName)
url.set(licenseUrl)
}
}
developers {
developer {
id.set(developerId)
name.set(developerName)
email.set(developerEmail)
}
}
organization {
name.set(developerOrg)
}
scm {
connection.set(gitUrl)
developerConnection.set(gitUrl)
url.set(siteUrl)
}
}
}
repositories {
maven("https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
name = "sonatype"
credentials {
username = ossUser
password = osspassword
}
}
}
}
nexusStaging {
username = ossUser
password = osspassword
packageGroup = publishedGroupId
}
在 gradle.properties
中提供所需的库详细信息:
libraryVersion = 0.1.1
libraryName = Your library name
libraryDescription = Your library description
publishedGroupId = com.yourdomain
artifactName = your-cool-librayr
siteUrl = https://gitlab.com/yourlibrayr
gitUrl = https://gitlab.com/yourlibrayr.git
developerId = ...
developerOrg = ...
developerName = Your Name
developerEmail = yourmail@mail.com
licensename = The Apache Software License,Version 2.0
licenseUrl = http://www.apache.org/licenses/LICENSE-2.0.txt
allLicenses = ["Apache-2.0"]
kotlin.mpp.enableGranularsourceSetsMetadata = true
gnsp.disableApplyOnlyOnRootProjectEnforcement = true
此处需要声明 gnsp.disableApplyOnlyOnRootProjectEnforcement = true
in subprojects 的 nexusStaging
属性。
最后把你的功劳记在local.properties
上:
osS.User=your_user_name
oss.password=your_pass
signing.keyId=last_8_numbers_of_key
signing.password=your_pass
signing.secretKeyRingFile=/path/to/keystorage.gpg
现在在项目目录中发布开放终端:
./gradlew build
./gradlew publish
./gradlew closeAndReleaseRepository
以上是大佬教程为你收集整理的将 kotlin 多平台库发布到 Maven Central(InvalidMavenPublicationException multiple artifacts with the same ...)全部内容,希望文章能够帮你解决将 kotlin 多平台库发布到 Maven Central(InvalidMavenPublicationException multiple artifacts with the same ...)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。