检测API的变化/演进

11

我想要对一个给定的Java项目进行API演化度量,特别是新建/重命名类、新方法、新废弃方法等。是否有一种工具可以检测这些变化?

早在2007年,Google GSoc项目就已经开始了,但我找不到最终的工作成果。


链接问题:https://dev59.com/NHI-5IYBdhLWcg3wCzxn - linuxbuild
6个回答

7
我会使用Clirr这个二进制兼容性检查器。从Clirr网站上可以了解到:

它是什么?

Clirr是一个工具,用于检查Java库与旧版本的二进制和源代码的兼容性。基本上,您提供两组jar文件,Clirr会输出公共API更改列表。如果Clirr检测到不兼容的API更改,则可以配置Clirr Ant任务以中断构建。在持续集成过程中,Clirr可以自动防止意外引入二进制或源代码兼容性问题。

特点

  • 报告所有API更改(目前只部分实现)
  • 评估每个变化对于二进制和源代码的兼容性
  • 支持纯文本和XML报告
  • 灵活的故障处理(警告与错误、中断构建或设置错误属性)

1
Clirr在2018年看起来非常过时。我认为它甚至不能处理使用Java 8编译的JAR文件。 - Jose Duarte
最后一个二进制文件是从2005年的。 - Johan Tidén

3

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


这是一个很棒的工具!! - Pavol Loffay

2

1
这就是我所提到的实际项目! - notnoop

2
尝试使用开源工具japi-compliance-checker。该工具能够显示API更改,并检测两个jar存档文件之间的向后源代码(SC)和向后二进制(BC)兼容性问题。请注意保留HTML标记。
japi-compliance-checker -old LIB-0.jar -new LIB-1.jar

log4j的样本报告:http://abi-laboratory.pro/java/tracker/timeline/log4j/

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

enter image description here

enter image description here


1

JDiff可能也值得一提。

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

据我了解,它在旧版本的源文件夹上运行并生成一个xml文件。与新版本的源文件夹相同。然后比较两个xml输出,并编译更改列表。以HTML javadoc API风格呈现。


JDiff 运行在代码的 Javadoc 上,而不是代码本身。它是 Clirr 的好伴侣(如果你可以信任 Javadoc),并且在相关项目中有提到(http://clirr.sourceforge.net/related.html)。但我更喜欢在代码层面上工作的东西。 - Pascal Thivent

1

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