我尝试使用maven-publish插件将工件上传到Nexus.几乎一切都很顺利,只有一个问题我找不到解决方案:生成的POM文件没有签名。
下面是我的代码片段:
plugins {
maven
`maven-publish`
id("signing")
id("org.jetbrains.dokka") version "1.4.10.2"
}
repositories {
mavenCentral()
}
group = "my.group"
version = "1.0.0"
tasks {
val sourcesJar by creating(Jar::class) {
archiveClassifier.set("sources")
from(sourceSets.main.get().allSource)
}
val javadocJar by creating(Jar::class) {
dependsOn.add(dokkaJavadoc)
archiveClassifier.set("javadoc")
from(dokkaJavadoc)
}
artifacts {
archives(sourcesJar)
archives(javadocJar)
archives(jar)
}
}
@Suppress("UnstableApiUsage")
signing {
useGpgCmd()
sign(configurations.archives.get())
}
@Suppress("UnstableApiUsage")
publishing {
repositories {
maven {
val releasesRepoUrl = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
val snapshotsRepoUrl = "https://oss.sonatype.org/service/local/staging/deploy/snapshots/"
url = uri(if (version.toString().endsWith("SNAPSHOT")) snapshotsRepoUrl else releasesRepoUrl)
credentials {
username=project.properties["ossrhUser"].toString()
password=project.properties["ossrhPassword"].toString()
}
}
}
publications {
create<MavenPublication>("maven") {
groupId = "my.group"
artifactId = "my-lib"
version = "1.0.0"
pom {
name.set("my-lib")
description.set("desc")
url.set("...")
licenses {
license {
name.set("The Apache License, Version 2.0")
url.set("http://www.apache.org/licenses/LICENSE-2.0.txt")
}
}
developers {
developer {
id.set("Balage1551")
name.set("Balazs Vissy")
email.set("...")
}
}
scm {
connection.set("...")
developerConnection.set("...")
url.set("...")
}
}
}
}
}当我运行publish一切顺利时,签名的jars被上传,但验证失败,缺少用于POM的ASC文件。
早些时候,在Gradle4中,当我使用maven和Groovy时,我能够添加到我的代码中:
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }到我的uploadArchives任务。
我如何使用Kotlin DSL和发布结构来做到这一点?
发布于 2020-11-11 04:59:08
这不是一个完整的答案,因为它没有回答我最初的问题,但这是一个可行的变通方法。我切换回maven并使用Upload任务:
named<Upload>("uploadArchives") {
val releasesRepoUrl = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
val snapshotsRepoUrl = "https://oss.sonatype.org/service/local/staging/deploy/snapshots/"
val ossrhUser = project.ext.properties["ossrhUser"].toString()
val ossrhPassword = project.ext.properties["ossrhPassword"].toString()
repositories {
withConvention(MavenRepositoryHandlerConvention::class) {
mavenDeployer {
beforeDeployment {
signing.signPom(this)
}
withGroovyBuilder {
"repository"("url" to releasesRepoUrl) {
"authentication"("userName" to ossrhUser, "password" to ossrhPassword)
}
"snapshotRepository"("url" to snapshotsRepoUrl) {
"authentication"("userName" to ossrhUser, "password" to ossrhPassword)
}
}
pom.project {
withGroovyBuilder {
// building up POM in groovy way, awful, but works
}
}
}
}
}发布于 2020-11-30 04:14:58
Gradle Maven发布插件页面的示例8应该包含一个解决方案:https://docs.gradle.org/current/userguide/publishing_maven.html
您应该使用sign(publishing.publications["maven"])而不是sign(configurations.archives.get())。
https://stackoverflow.com/questions/64753856
复制相似问题