当前位置: 首页 > 知识库问答 >
问题:

在gradle中使用maven publish插件生成SHA512校验和文件

景令秋
2023-03-14

默认情况下,maven publish插件为所有工件生成MD5和SHA1校验和文件。但是有没有办法让插件生成安全的校验和文件(最好是SHA512)?

这很容易重现。我刚刚初始化了一个新的java-Library项目并添加了maven-Publsion插件及其配置

建筑格拉德尔:

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")
}

但我需要“手动”将它们放在实际工件旁边的正确文件夹中,这是我想要避免的。

编辑:如果无法指定校验和算法,是否可以挂接到发布任务并将自定义校验和文件添加到工件目标文件夹?我不想将校验和文件本身添加为工件,因为校验和会有MD5和SHA1校验和,这没有任何意义。

共有2个答案

陈修诚
2023-03-14

您可能无法配置maven publish使用的校验和算法,因为它们似乎是硬编码的。

Gradle使用来自org的Sonatype乙醚。格拉德尔。应用程序编程接口。出版专家内部的行动MavenDeployAction发布到Maven存储库。您可以在生成的调试日志中找到对此类的引用:

23:23:23.232 [INFO] [org.gradle.api.publication.maven.internal.action.MavenDeployAction] Deploying to file:/tmp/foobar/build/repo/

DeployRequest中似乎没有校验和算法被传递到以太网。换句话说,以太网似乎以某种方式选择了算法本身。

从以太方面来看,我在以太存储库中找到的非测试文件中对sha1的唯一引用是这三个:1、2、3。这三个类似乎也是org的计算方法的唯一(非测试)用户。sonatype。以太。util。用于计算校验和的校验和。换句话说:无论Gradle可传递地使用这些类中的哪一个(除非它奇怪地从其他地方获取校验和),在每种情况下,SHA-1和MD5校验和算法都是硬编码的,您无法更改它们。

秦俊友
2023-03-14

2019年11月发布的Gradle 6.0在其maven publish插件中默认使用SHA-256和SHA-512作为哈希算法。看见

  • https://docs.gradle.org/6.0/release-notes.html(“SHA256和SHA512校验和的发布”)

注意,Gradle 6.0.1添加了一种抑制使用这些新算法的方法,因为一些工件服务器不接受它们:

  • https://docs.gradle.org/6.0.1/release-notes.html(“SHA256和SHA512校验和的发布”)
  • 添加-Dorg。格拉德尔。内部的出版校验和。不安全=适用于CLI或添加systemProp。组织。格拉德尔。内部的出版校验和。不安全=忠于你的梯度。属性文件
 类似资料:
  • 我已经读了一些关于这个、这个和这个的文章,但我找不到答案。使用Android Studio中的Gradle插件,我无法生成jacoco文件。exec(在任何子文件夹中均不包含*.exec)。 为了生成这个文件,我必须在build.gradle文件中设置什么? 注意:请记住,我使用的是Gradle插件(这是不同的)和Android Studio。

  • 我在AS中有一个带有本机库的项目。我正在尝试使用实验插件(gradle实验:0.6.0-alpha5)来获取. so文件(稍后在System.loadLibrary()中使用它)。但是我不能生成它们。我真的不明白,为什么? 我用这个指令编写了build.gradle。这是: 尝试运行应用程序时出现的错误: java.lang.无法从加载器加载ImageProcdalvik.system.PathC

  • 我采用的方法的另一个问题是,它收集所有构建变体的类路径,而不是选择一个。

  • 我所在的团队使用maven和gradle,我有一个gradle项目,希望生成一个功能正常的pom文件,以便我们的maven用户可以继续使用maven。 我已经解决了这个问题,生成了一个具有适当依赖关系的pom,如下所示: 建筑格拉德尔节选: 这对于仅创建pom上的依赖项非常有效,但gradle的maven插件API似乎不支持定义

  • 问题内容: 我想使用Gradle任务为 Java 项目生成Java类,类似于Android插件如何使用表示法创建,例如: 用例是我正在开发一个开源应用程序,该应用程序需要使用API​​密钥和机密。我拥有不致力于我的VCS 的密钥和秘密。 到目前为止,我有这个: 并且有效- 在指定位置生成该文件。但是它非常脆弱。明确命名软件包很容易出错。只要文件可以在其他软件包中生成(例如,在的根目录),只要能够使

  • 我正在使用OpenAPI生成器gradle插件和“jaxrs resteasy”生成器,我想知道是否有办法更改输出文件的名称。现在它正在生产ApiApi。java,ApiService。java,ApiException。java等。 有没有办法配置它,这样输出将是MyNameApi.java和MyNameApiService.java? 示例YAML: