首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用maven-publish插件签署POM文件

使用maven-publish插件签署POM文件
EN

Stack Overflow用户
提问于 2020-11-09 22:48:54
回答 2查看 470关注 0票数 0

我尝试使用maven-publish插件将工件上传到Nexus.几乎一切都很顺利,只有一个问题我找不到解决方案:生成的POM文件没有签名。

下面是我的代码片段:

代码语言:javascript
复制
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时,我能够添加到我的代码中:

代码语言:javascript
复制
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }

到我的uploadArchives任务。

我如何使用Kotlin DSL和发布结构来做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2020-11-11 04:59:08

这不是一个完整的答案,因为它没有回答我最初的问题,但这是一个可行的变通方法。我切换回maven并使用Upload任务:

代码语言:javascript
复制
    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
                        }
                    }
                }
            }
        }
票数 0
EN

Stack Overflow用户

发布于 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())

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64753856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档