摘要
如何让ant从相同的.class文件中重复生成与字节相同的jar文件?
背景
我们的构建过程执行以下操作:
注意:我们执行了最后一步,因此开发人员可以访问此jar文件,而无需自行构建.我们使用一个特殊的'derived'目录来区分源和工件.
问题
即使源文件没有改变,我们也无法获得生成字节相同的.jar文件的蚂蚁,即每个构建生成一个略有不同的jar(具有不同的MD5)
我检查了互联网,并在5年前找到了这个问题:
如果我使用ANT编译一些代码并创建一个jar和相关的md5文件,那么即使代码没有改变,md5文件中的校验和也是不同的.任何想法都是为什么它如此规避?我怀疑某处有一些时间戳信息.
http://www.velocityreviews.com/forums/t150783-creating-new-jar-same-code-different-md5.html
根据回复,我尝试了以下方法:
[注意:第二步似乎无效.见下文]
每次构建之后,.jar文件仍然具有不同的MD5总和.
CSI:Jar文件
我没有进行过检查和检查,并且罐子的内容和时间戳在"不同"的罐子之间匹配,但有一个例外:META-INF/MANIFEST.MF的不同时间戳.
码
<-- touch classes and manifest to set consistent timestamp across builds -->
<touch millis="0">
<fileset dir="${mycompany.ws.classes.dir}"/>
</touch>
<touch millis="0" file="mymanifest.mf"/>
<jar destfile="${derived.lib.dir}/mycompanyws.jar"
manifest="mymanifest.mf"
basedir="${mycompany.ws.classes.dir}"
includes="**/com/mycompany/**,**/org/apache/xml/**"
/>
Run Code Online (Sandbox Code Playgroud)
其他选择
如果.java文件已经更改,我们可以使用更高级的ant编程来检查.jar文件.