检测API变化/演变

我想测量给定Java项目的API演变,特别是新的/重命名的类,新方法,新弃用的方法等。是否有工具可以检测到这些变化?

早在2007年, Google GSoc项目就已启动,但是,我无法找到最终的工作。

我使用Clirr ,二进制兼容性检查器。 来自Clirr网站:

它是什么?

Clirr是一个检查Java库以获得与旧版本的二进制和源兼容性的工具。 基本上你给它两组jar文件,Clirr转储出公共api中的变化列表。 可以将Clirr Ant任务配置为在检测到不兼容的api更改时中断构建。 在持续集成过程中,Clirr可以自动防止意外引入二进制或源兼容性问题。

特征

  • 报告所有API更改(目前仅部分实施)
  • 评估每个变化。 二进制和源兼容性
  • 支持纯文本和XML报告
  • 灵活的故障处理(警告与错误,打破构建或设置错误属性)

还有一个名为Revapi的新API演化检查工具

顺便说一下,gwt源代码中似乎有一个api-checker,不知道这是否是上述GSoc项目的产品。

GwtJavaApiCompatibilityChecker也用在build.xml中

JDiff也许值得一提。

JDiff是一个Javadoc doclet,它生成一个HTML报告,其中包含比较两个API时已经删除,添加或更改的所有包,类,构造函数,方法和字段的HTML报告,包括文档。 这对于准确描述产品的两个版本之间发生了哪些变化非常有用。 仅比较每个版本的API(应用程序编程接口)。 它没有比较源代码执行时的function。

据我所知,它运行在旧版本的源文件夹上并生成一个xml文件。 新版本的源文件夹也是如此。 比较两个xml-outputs并编译一个changelist。 在html-javadoc-api-style中

您可能还想尝试japicmp 。

尝试使用japi-compliance-checker工具。 它是开源的。 该工具显示API更改并检测两个jar存档之间的向后源(SC)和向后二进制(BC)兼容性问题:

japi-compliance-checker -old LIB-0.jar -new LIB-1.jar 

log4j的示例报告: http : //abi-laboratory.pro/java/tracker/timeline/log4j/

在此处输入图像描述

您可以在特定库版本的报告中按严重性级别找到发现的兼容性问题的分类:

在此处输入图像描述