1. 概述

Jar 是用于分发和打包Java应用的文档格式,以ZIP格式构建,以 .jar 为文件扩展名。

有时我们需要对比不同版本 Jar 文件的差异变化,以检测兼容性问题。本文我们将介绍几种工具帮助我们分析Jar文件。

2. 示例JAR文件

为了方便演示,我们找两个个Jar,以mallet举例。Mallet是一个 Java 机器学习库, 我们将对比版本2.0.7与版本2.0.8。我们将使用不同的工具来比较这两个JAR文件,并记录下变化。

3. 使用 Jarcomp

Jarcomp是一个免费的跨平台工具,用于比较JAR和ZIP文件。它通过引用大小变化来显示两个文件之间的差异。

我们将使用它来比较我们的示例JAR文件。首先,创建一个新的目录并将样本JAR文件复制到其中。然后,获取jarcomp可执行JAR文件并将其放在我们创建的目录中。最后,在终端中打开并切换到该目录。

接下来,我们将运行Jarcomp可执行JAR文件,使用我们的样本JAR文件:

$ java -jar jarcomp_02.jar mallet-2.0.7.jar mallet-2.0.8.jar

我们的工具生成了一个报告,显示了样本JAR文件的变化:

jarcomp比较JAR

报告展示了二进制文件的变化,还总结了样本JAR文件中的文件数量以及它们的整体大小。

4. 使用PkgDiff

PkgDiff意为包变更分析器。它可视化软件包(如ZIP、JAR、TAR.GZ、DEB等)中的更改。该工具帮助软件维护者跟踪变化,确保新旧版本之间的兼容性。

它支持FreeBSD、Mac OS X和GNU/Linux平台。

我们将使用这个工具来比较我们的样本JAR文件。

4.1. 安装

首先,我们在机器上下载工具,然后解压tar.gz文件:

$ tar -xvf pkgdiff-1.7.2.tar.gz

接下来,进入解压后的文件夹:

$ cd pkgdiff-1.7.2

最后,使用makefile安装工具:

$ sudo make install

现在,工具已准备好使用。

4.2. 使用

让我们使用工具可视化我们的样本JAR文件中的更改。首先,切换到包含样本JAR文件的目录。然后,使用pkgdiff命令来比较这些文件:

$ pkgdiff  mallet-2.0.7.jar mallet-2.0.8.jar

工具生成了一个HTML格式的报告,显示二进制文件和源文件的差异:

pkgdiff比较JAR文件

报告展示了二进制文件的变化,列出了类文件的百分比变化,并总结了二进制内容。它还显示了添加和删除的文件数量,以及总目录数和新增项。

5. 使用JAPICC

Java API Compliance Checker (JAPICC)是一个评估Java库之间相似性的工具。它在二进制和源级显示变化,检查可能导致向后兼容性风险的修改,如移除的方法和类字段、引入的方法等。它通过比较两个二进制文件来实现这一点。

此工具为二进制和源代码兼容性检查生成HTML报告。它支持Java和Scala。

5.1. 安装

首先,我们在机器上下载工具,然后解压下载的zip:

$ unzip japi-compliance-checker-2.4.zip

解压后,进入文件夹:

$ cd japi-compliance-checker-2.4

最后,使用makefile在系统上安装:

$ sudo make install

现在,工具准备就绪。

5.2. 使用

我们将使用安装的工具来比较我们的样本JAR文件。首先,创建一个新目录,将JAR文件移动到其中。然后在终端中切换到新目录,最后运行japi-compliance命令来比较两个JAR文件:

$ japi-compliance-checker mallet-2.0.7.jar mallet-2.0.8.jar

这将在我们的目录中生成一个报告。报告包含了JAR文件在二进制和源代码层面的差异。

JAPICC比较JAR文件

报告显示了99.8%的兼容性以及新版本增加的方法。它列出了源文件中的方法和类总数,还比较了单个二进制和源文件,并给出了百分比变化。

6. 使用IntelliJ IDEA

IntelliJ IDEA是由JetBrains开发的集成开发环境。IDE内建了比较JAR文件的工具。我们将使用IDE来比较我们的样本JAR文件。首先,启动IDE并打开包含样本JAR文件的文件夹。

接着,选择两个样本JAR文件,然后按下CTRL + D来比较它们。

我们将得到一个详尽的关于JAR文件更改的报告:

IntelliJ IDEA比较JAR文件

生成的报告清晰易懂,展示了二进制文件、其内容以及变化。这个功能简单易用,无需额外安装即可使用。

报告还比较了源文件,显示了类及其内容,明确指出源文件中添加的代码。

7. 总结

在这篇教程中,我们探讨了多种用于比较JAR文件的工具。对于初学者来说,IntelliJ IDEA显得直观易用,它提供了全面的报告,清晰地展示了类文件的变化。

其他工具同样能完成任务,PkgDiff和JAPICC生成报告,展示二进制和源文件的更改。