这两个内容相同的jar文件为什么文件大小不同?

5

我正在重新组织我们的Java代码库,并希望比较我们生成的jar文件。

在旧的源代码树中构建时,我得到了一个大小为3360081的jar文件。

在新的源代码树中,它是3360128。

我执行“jar tvf jarfile”然后剥离文件中的日期信息。

列表看起来像这样:

     0 Mon Mar 16 10:41:16 EDT 2009 META-INF/
   102 Mon Mar 16 10:41:14 EDT 2009 META-INF/MANIFEST.MF
     0 Mon Mar 16 10:41:14 EDT 2009 decodes/

在我去掉日期后,清单看起来像这样:

     0  META-INF/
   102  META-INF/MANIFEST.MF
     0  decodes/

这两个jar列表是相同的。

什么会导致“相同”的jar文件有47个字节的差异?

我正在RedHat Linux 4上运行编译。


“旧”和“新”源代码树有什么区别?你改名了吗? - panschk
3个回答

7
编译文件的修改时间很可能是原因,同时你的类文件可能实际上是不同的。如果重新组织了包结构,它们肯定会不同。

JAR清单中剥离了文件修改时间,只保留了文件大小和类名。 - Mel
2
谁在乎清单呢?修改时间存储在JAR文件内。当您重新编译代码并创建新的JAR文件时,它们显然会发生变化。 - Bombe
同意,时间被存储和压缩,因此JAR文件的大小会发生变化。 - ReneS

2

可能不是这种情况,但你编译这两个源代码库时是否使用了不同的编译器版本(即使是次要版本差异)?


1

如果您使用BeyondCompare(或类似工具),它可以比较您的jar文件,并识别存档中不同的文件(对于文本文件,可以区分到行/字符的差异,或者只突出显示已更改的二进制文件)。

(我认为文件修改时间不会保存在.jar格式的文本表示中,也不会影响.jar文件大小)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接