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