如何与gradle签署maven出版物
拥有使用新发布插件的如何与gradle签署maven出版物,gradle,signing,gnupg,Gradle,Signing,Gnupg,拥有使用新发布插件的build.gradle脚本: apply plugin: 'java' apply plugin: 'groovy' apply plugin: 'signing' apply plugin: 'maven-publish' // ... publishing { publications { maven(MavenPublication) { from components.java artif
build.gradle
脚本:
apply plugin: 'java'
apply plugin: 'groovy'
apply plugin: 'signing'
apply plugin: 'maven-publish'
// ...
publishing {
publications {
maven(MavenPublication) {
from components.java
artifact sourcesJar {
classifier 'source'
}
}
}
repositories {
maven {
name 'Temporary'
url "file://${rootProject.buildDir}/repo"
}
}
}
signing {
sign configurations.archives
}
因此,问题是:
新的酝酿中的
maven publish
插件还不支持签名。尽管它仍然支持签名,但仍然可以使用签名和maven publish插件上传签名的工件
首先,我们像往常一样设立了我们的签字部门:
apply plugin: 'signing'
signing {
sign configurations.archives
}
这将签署项目档案。为了对maven publish插件创建的POM进行签名,我们添加了一个签名任务:
task signPom(type: Sign) {
sign project.file('build/publications/maven/pom-default.xml')
outputs.upToDateWhen { false } // the signing plugin does not seem to notice
// it when the publications folder with the
// signature has been deleted. So we always
// create a new signature
}
不可能简单地添加一个符号generatePomFileForMavenPublication
行
作为maven plublish插件进行签名,这意味着在配置签名部分时,生成pom的任务不可用
现在我们有了所有需要的签名文件。我们只需要将它们添加到
出版物:
apply plugin: 'maven-publish'
publishing {
publications {
maven(MavenPublication) {
from components.java
project.tasks.withType(Sign) {
signatures.all {
def type = it.type
if (it.file.name.endsWith('.tar.gz.asc')) { // Workaround in case a tar.gz file should published
type = 'tar.gz.asc'
} else if (it.type.equals('xml.asc')) { // Set correct extension for signature of pom file
type = 'pom.asc'
}
artifact source: it.file, classifier: it.classifier ?: null, extension: type
}
}
pom.withXml {
// The pom can be enriched as usual
}
}
}
}
这将获取由构建创建的所有签名文件,并将它们作为工件添加到发布中。为了正确命名pom文件,需要将文件扩展名xml.asc替换为pom.asc(maven publish插件将pom本地存储为pom default.xml)
所有的任务都在那里并且相互关联,最后要做的事情
要在模型中设置依赖项,请执行以下操作:
model {
tasks.publishMavenPublicationToMavenLocal {
dependsOn project.tasks.withType(Sign)
}
tasks.publishMavenPublicationToNexusLocalSnapshotsRepository {
dependsOn project.tasks.withType(Sign)
}
tasks.signPom {
dependsOn tasks.generatePomFileForMavenPublication
}
}
第二个任务的名称取决于
publications.repository
部分。我的名字叫“NexusLocalSnapshots”
这种方法的唯一缺点是,每个签名文件都有一个md5
并创建sha1校验和文件。这似乎不是一个问题
不过,repository manager(使用Nexus 3在本地测试)。谢谢,因此将回滚到使用
maven
插件。希望看到那些需要将开放源代码发布到maven central的用户支持签名和用户名/密码。目前,您必须使用maven
插件。@PeterNiederwieser,我不知道你说“maven发布插件还不支持签名”是什么意思。鉴于上面示例中的签名插件工作正常,即按预期生成.asc文件,这难道不是真的要找到一种方法,让maven publish插件像其他工件一样简单地上传它们吗?从Gradle 2.2开始,我的答案仍然有效。Gradle是否支持在6.5或7中签名maven出版物?我似乎有签名插件在为我的工件签名,但它们不再被上传。在我设置签名之前,未签名的工件正在上载。。。