我正在使用相同的JVM验证远程unix盒子上的jar文件和内置本地机器(Windows& Cygwin)上的jar文件。
作为POC我试图验证是否在我的机器上使用连续构建生成的jar文件生成相同的校验和,我在下面尝试过,
我不确定java内部进程如何生成类文件然后生成jar文件,有人可以帮我理解下面几点
[0,.25,.4,.3]
实用程序在提出值时会考虑文件的时间戳吗?答案 0 :(得分:2)
问题1的答案:cksum不考虑归档文件(例如jar文件)的时间戳,但确实考虑jarfile中文件的时间戳。
问题2的答案:各个类文件的校验和将与所有其他相同的事物(源代码,编译器等)相同。jar文件的校验和将有所不同。差异的原因可能是jarfile中文件的时间戳记,或者文件是按不同顺序放入存档的(例如,由并行构建引起的)。
如果要使用gradle创建可复制的版本,可以使用以下配置进行操作:
tasks.withType(AbstractArchiveTask) {
preserveFileTimestamps = false
reproducibleFileOrder = true
}
Maven允许类似的操作,对不起,我不知道如何使用ant。
更多信息在这里:
https://dzone.com/articles/reproducible-builds-in-java
https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=74682318