1

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

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

(这工作正常)。


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

经过一些评论后,我看到了两个选项:

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

1 回答 1

1

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

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

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

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

  • 为了 Java 类之间的一致性,也可以“密封”一个 jar。

oracle 清单教程: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开始,它允许集成现有的插件。
于 2013-09-06T19:42:45.310 回答