如何在Gradle Kotlin DSL中用maven-publish插件签名POM文件
解决Gradle Kotlin DSL中Maven Publish的POM签名问题
我之前也踩过这个坑!在Gradle Kotlin DSL里用maven-publish插件时,单纯给archives配置签名已经不适用了——这是旧版maven插件的逻辑,而maven-publish是基于publications来管理所有发布构件的。要让POM文件也生成签名,你需要把签名目标切换到你的Maven Publication上,同时调整构件的关联方式。
调整后的完整配置
下面是修改后的代码,重点优化了signing块和publishing.publications部分:
plugins { `maven-publish` 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(dokkaJavadoc) archiveClassifier.set("javadoc") from(dokkaJavadoc) } } @Suppress("UnstableApiUsage") signing { useGpgCmd() // 关键修改:签名目标改为maven publication,而非旧版的archives配置 sign(publishing.publications["maven"]) } @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") { // 自动关联项目主jar构件 from(components.java) // 手动添加sources和javadoc构件 artifact(tasks["sourcesJar"]) artifact(tasks["javadocJar"]) 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("...") } } } } }
关键修改点说明
- 签名目标切换:把
sign(configurations.archives.get())改成sign(publishing.publications["maven"]),这样签名插件会处理该publication下的所有内容——包括POM文件、主jar、sourcesJar、javadocJar,自动为它们生成对应的.asc签名文件。 - 构件关联优化:用
from(components.java)自动关联项目的主jar构件,再通过artifact()手动添加sources和javadoc jar,maven-publish会自动把这些构件纳入发布流程,不需要原来的artifacts块了。 - 移除冗余配置:删掉了旧版
maven插件的引用和artifacts块,因为maven-publish已经完全替代了旧插件的发布功能。
这样执行publish任务时,Gradle会为POM文件生成签名,上传后Nexus的验证就能顺利通过了。
内容的提问来源于stack exchange,提问作者Balage1551
相关产品推荐
相关产品推荐

