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文件的变化:
报告展示了二进制文件的变化,还总结了样本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格式的报告,显示二进制文件和源文件的差异:
报告展示了二进制文件的变化,列出了类文件的百分比变化,并总结了二进制内容。它还显示了添加和删除的文件数量,以及总目录数和新增项。
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文件在二进制和源代码层面的差异。
报告显示了99.8%的兼容性以及新版本增加的方法。它列出了源文件中的方法和类总数,还比较了单个二进制和源文件,并给出了百分比变化。
6. 使用IntelliJ IDEA
IntelliJ IDEA是由JetBrains开发的集成开发环境。IDE内建了比较JAR文件的工具。我们将使用IDE来比较我们的样本JAR文件。首先,启动IDE并打开包含样本JAR文件的文件夹。
接着,选择两个样本JAR文件,然后按下CTRL + D来比较它们。
我们将得到一个详尽的关于JAR文件更改的报告:
生成的报告清晰易懂,展示了二进制文件、其内容以及变化。这个功能简单易用,无需额外安装即可使用。
报告还比较了源文件,显示了类及其内容,明确指出源文件中添加的代码。
7. 总结
在这篇教程中,我们探讨了多种用于比较JAR文件的工具。对于初学者来说,IntelliJ IDEA显得直观易用,它提供了全面的报告,清晰地展示了类文件的变化。
其他工具同样能完成任务,PkgDiff和JAPICC生成报告,展示二进制和源文件的更改。