在 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.ChecksumUtilsAether 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 作为哈希算法。参见

请注意,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 文件