拥有使用新发布插件的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
}
所以问题是:
答案 0 :(得分:6)
新的孵化maven-publish
插件尚不支持签名。
答案 1 :(得分:3)
虽然它仍然受not officially支持,但仍然可以使用签名和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
}
无法简单地添加sign generatePomFileForMavenPublication
行
以signing
作为maven-plublish插件leverages support for late
configuration,这意味着在配置签名部分时无法生成用于生成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 )。 / p>
所有任务都在那里并相互联系,最后要做的事情 是在模型中设置依赖项:
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校验和文件已创建。这似乎不是一个问题 但是,存储库管理器(使用Nexus 3进行本地测试)。