我正在修改构建过程,我需要对两个 .ear 文件的内容进行完整比较。这意味着递归地比较 .ear 中的每个档案。这些 .ear 文件具有包含档案的档案。
我看过 Beyond Compare 和 Archive Analyzer,但它们一次只做一个级别。我必须手动深入了解每个存档。我正在寻找更自动的东西。
Eclipse 和 UltraCompare 对两个 .ears 进行二进制比较,这不是我想要的。
这样的工具存在吗?
zipdiff提供了一个非常好的开源解决方案。
我的问题不仅仅是递归地扩展 .ear 文件(我编写了一个 Java 类来做到这一点 - 递归使它变得简单。)一旦扩展了 .ear 文件,我必须区分目录以检查是否有任何更改。如果时间戳以外的任何内容发生更改,那么我知道构建正在生成不同的二进制文件。
第二个问题是我们的构建过程会生成数百个 .xml 文件,随后的构建会以不同的顺序重新生成这些 .xml 文件。我不确定为什么。当我扩展由背靠背构建生成的两个 .ear 文件时,结果目录的差异显示数百个具有差异的 .xml 文件,即使它们在功能上是等效的。
除了递归扩展 .ear 文件之外,我还需要做一个 diff 并排除某些目录中的 .xml 文件。我认为 Cygwin diff 会这样做,但 --exclude 开关无法识别任何路径信息:
如果我没有找到解决方案,我将编写另一个 Java 类来逐步遍历整个目录结构,在每个目录中执行单级差异并排除相应目录中的 .xml 文件。
我有一种重新发明轮子的感觉,但我现在找不到轮子。
在 Beyond Compare 中进入Session Settings
对话框,Handling
选项卡上有一个Archive Handling
选项。如果它设置为As folders always
BC 将像文件夹一样对待档案,所以它是完全递归的。