在 gradle 中使用 maven-publish 插件生成 SHA512 校验和文件
Generate SHA512 Checksum File using maven-publish Plugin in gradle
maven-publish
插件默认为所有工件生成 MD5 和 SHA1 校验和文件。但是有没有办法让插件生成安全的校验和文件(SHA512 最好)?
这很容易重现。我刚刚初始化了一个新的 java-library
项目并添加了 maven-publish
插件及其配置
build.gradle:
apply plugin: 'java'
apply plugin: 'maven-publish'
repositories {
jcenter()
}
dependencies {
}
publishing {
repositories {
maven {
url rootProject.buildDir.path + '/repo'
}
}
publications {
mavenJava(MavenPublication) {
groupId = 'org.gradle.sample'
artifactId = 'project1-sample'
version = '1.1'
from components.java
}
}
}
我已经查阅了 gradle 文档和 javadoc,但根本找不到关于校验和文件的任何提示。我知道我可以使用像这样的 ANT 校验和任务很容易地为工件生成校验和
doLast {
ant.checksum(file: archivePath, algorithm: "SHA-512")
}
但我会不知何故需要将它们放在正确的文件夹中,除了实际的工件 "manually",这是我想避免的事情。
编辑:
如果无法指定校验和算法,是否可以通过某种方式挂接到 publish
任务并将自定义校验和文件添加到工件目标文件夹?我不想将校验和文件本身添加为工件,因为校验和会有 MD5 和 SHA1 校验和,这没有意义。
简而言之
您可能无法配置 maven-publish
使用的校验和算法,因为它们似乎是硬编码的。
更详细
Gradle 使用来自 org.gradle.api.publication.maven.internal.action.MavenDeployAction
的 Sonatype Aether 发布到 Maven 存储库。您可以在构建的调试日志中找到此 class 的 reference:
23:23:23.232 [INFO] [org.gradle.api.publication.maven.internal.action.MavenDeployAction] Deploying to file:/tmp/foobar/build/repo/
似乎没有校验和算法在 DeployRequest
中传递给 Aether。换句话说,Aether 似乎以某种方式选择了算法本身。
从 Aether 方面来看,我在 org.sonatype.aether.util.ChecksumUtils
的 Aether repository are these three: 1, 2, 3. These three classes also seem to be the only (non-test) users of the calc
method 中找到的非测试文件中唯一对 sha1
的引用用于计算校验和。换句话说:无论 classes 中的哪一个被 Gradle 传递使用(除非它应该奇怪地从其他地方获取校验和),在每种情况下,SHA-1 和 MD5 校验和算法是硬编码的,您无法更改它们。
Gradle 2019 年 11 月发布的 6.0 在其 maven-publish 插件中默认使用 SHA-256 和 SHA-512 作为哈希算法。参见
- https://docs.gradle.org/6.0/release-notes.html ("Publication of SHA256 and SHA512 checksums")
- https://github.com/gradle/gradle/security/advisories/GHSA-mrm8-42q4-6rm7
请注意,Gradle 6.0.1 添加了一种方法来禁止使用这些较新的算法,因为某些工件服务器不接受它们:
- https://docs.gradle.org/6.0.1/release-notes.html ("Publication of SHA256 and SHA512 checksums")
- 将 -Dorg.gradle.internal.publish.checksums.insecure=true 添加到 CLI 或将 systemProp.org.gradle.internal.publish.checksums.insecure=true 添加到您的 gradle.properties 文件
maven-publish
插件默认为所有工件生成 MD5 和 SHA1 校验和文件。但是有没有办法让插件生成安全的校验和文件(SHA512 最好)?
这很容易重现。我刚刚初始化了一个新的 java-library
项目并添加了 maven-publish
插件及其配置
build.gradle:
apply plugin: 'java'
apply plugin: 'maven-publish'
repositories {
jcenter()
}
dependencies {
}
publishing {
repositories {
maven {
url rootProject.buildDir.path + '/repo'
}
}
publications {
mavenJava(MavenPublication) {
groupId = 'org.gradle.sample'
artifactId = 'project1-sample'
version = '1.1'
from components.java
}
}
}
我已经查阅了 gradle 文档和 javadoc,但根本找不到关于校验和文件的任何提示。我知道我可以使用像这样的 ANT 校验和任务很容易地为工件生成校验和
doLast {
ant.checksum(file: archivePath, algorithm: "SHA-512")
}
但我会不知何故需要将它们放在正确的文件夹中,除了实际的工件 "manually",这是我想避免的事情。
编辑:
如果无法指定校验和算法,是否可以通过某种方式挂接到 publish
任务并将自定义校验和文件添加到工件目标文件夹?我不想将校验和文件本身添加为工件,因为校验和会有 MD5 和 SHA1 校验和,这没有意义。
简而言之
您可能无法配置 maven-publish
使用的校验和算法,因为它们似乎是硬编码的。
更详细
Gradle 使用来自 org.gradle.api.publication.maven.internal.action.MavenDeployAction
的 Sonatype Aether 发布到 Maven 存储库。您可以在构建的调试日志中找到此 class 的 reference:
23:23:23.232 [INFO] [org.gradle.api.publication.maven.internal.action.MavenDeployAction] Deploying to file:/tmp/foobar/build/repo/
似乎没有校验和算法在 DeployRequest
中传递给 Aether。换句话说,Aether 似乎以某种方式选择了算法本身。
从 Aether 方面来看,我在 org.sonatype.aether.util.ChecksumUtils
的 Aether repository are these three: 1, 2, 3. These three classes also seem to be the only (non-test) users of the calc
method 中找到的非测试文件中唯一对 sha1
的引用用于计算校验和。换句话说:无论 classes 中的哪一个被 Gradle 传递使用(除非它应该奇怪地从其他地方获取校验和),在每种情况下,SHA-1 和 MD5 校验和算法是硬编码的,您无法更改它们。
Gradle 2019 年 11 月发布的 6.0 在其 maven-publish 插件中默认使用 SHA-256 和 SHA-512 作为哈希算法。参见
- https://docs.gradle.org/6.0/release-notes.html ("Publication of SHA256 and SHA512 checksums")
- https://github.com/gradle/gradle/security/advisories/GHSA-mrm8-42q4-6rm7
请注意,Gradle 6.0.1 添加了一种方法来禁止使用这些较新的算法,因为某些工件服务器不接受它们:
- https://docs.gradle.org/6.0.1/release-notes.html ("Publication of SHA256 and SHA512 checksums")
- 将 -Dorg.gradle.internal.publish.checksums.insecure=true 添加到 CLI 或将 systemProp.org.gradle.internal.publish.checksums.insecure=true 添加到您的 gradle.properties 文件