Maven - 添加可在 Java 内部访问的校验和



上次我在maven中成功添加了一个不错的checksum-maven-plugin。我为我的一个文件生成校验和。我为此使用了这种特殊配置:

<execution>
      <phase>package</phase>
  <goals>
    <goal>files</goal>
  </goals>
</execution>
    ...
<fileSets>
<fileSet>
  <directory>${basedir}/myfiles</directory>
  <includes>
    <include>file-name</include>
  </includes>
</fileSet>
</fileSets>

它工作得很好,并生成一个file-name.md5文件,其中包含/target中的校验和。


我通过此执行构建了带有maven-assembly-plugin的 JAR。

<execution>
  <phase>package</phase>
  <goals>
    <goal>single</goal>
  </goals>
</execution>

在 Java 中,我已经可以使用以下命令访问我的src/main/resources/my.properties属性文件:

InputStream inputStream = RunJetty.class.getClassLoader()
        .getResourceAsStream("my.properties");

(这工作正常)。


我需要通过传递给 Java 代码生成的校验和checksum-maven-plugin。怎么做?

在一些评论之后,我看到两个选项:

  • 一种是将校验和文件添加到 JAR。
  • 2'nd 是将校验和值添加到my.properties文件(或创建单独的属性文件)。

也许,JAR 清单是存储哈希的合适位置,当然,只要您不想存储 jar 本身的哈希值。如果哈希不仅仅用于一致性检查,例如许可,则可以使用盐和加密来提高安全性。

  • maven-jar-plugin能够
    • 在罐子上签名
    • 自定义清单
    • 打包自定义文件

      我认为,这是要走的路,因为 maven 文物应该以这种方式保持一致,而事后更改罐子可能会给您带来麻烦。在此处查看如何添加自定义文件,例如您的属性文件。但是,请注意在此插件之前配置checksum-maven-plugin,或者,您也可以通过将它映射到prepare-package阶段来提前执行。

  • 有关如何阅读清单,请看这里:阅读我自己的 Jar's 清单

  • 为了Java类之间的一致性,还可以"密封"一个罐子。

预言机清单教程:http://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html


checksum-maven-plugin确实无法将哈希作为属性发出。

我目前能想到的解决方案是:

  1. 将 jar 中该哈希列表文件的相对路径添加到清单。我认为将哈希值与清单分开并不那么糟糕,因为到目前为止您已经这样做了,尤其是在哈希列表很大的情况下。
  2. 添加另一个插件执行以读取使用 cheksum 插件生成的文件;请参阅:https://stackoverflow.com/a/9339405/1175253。但仅此可能还不够,因为如果不进一步的工作,就无法迭代添加哈希。最终可能会将哈希文件内容转储到清单条目中或编写自定义插件。如果我要开发这样一个插件,我会从mojo-executor-maven-plugin开始,它允许集成现有插件。

最新更新