【问题标题】:Detecting API changes/evolution [closed]检测 API 更改/演变 [关闭]
【发布时间】:2010-12-12 11:56:45
【问题描述】:

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

早在2007年,就发起了Google GSoc project,但是,我找不到最终的工作。

【问题讨论】:

标签: java api compatibility


【解决方案1】:

我会为此使用Clirr,这是一个二进制兼容性检查器。来自 Clirr 网站:

这是什么?

Clirr 是一个检查 Java 的工具 二进制和源代码库 与旧版本的兼容性。 基本上你给它两套罐子 文件和 Clirr 转储出一个列表 公共 api 的变化。克利尔 蚂蚁任务可配置破解 如果检测到不兼容,则构建 api 变化。在一个连续的 集成过程 Clirr 可以 自动防止意外 引入二进制或源代码 兼容性问题。

...

特点

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

【讨论】:

  • Clirr 在 2018 年看起来非常过时。我认为它甚至不适用于 java 8 编译的 jar 文件。
  • 最后一个二进制是 2005 年的
【解决方案2】:

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

【讨论】:

  • 这是一个很棒的工具!!
【解决方案3】:

顺便说一句,gwt 源代码中似乎有一个 api-checker,不知道是不是提到的 GSoc 项目的产物。

GwtJavaApiCompatibilityChecker也用于build.xml

【讨论】:

  • 这是我引用的实际项目!
【解决方案4】:

JDiff 或许也值得一提。

JDiff 是一个 Javadoc doclet,它 生成所有的 HTML 报告 包,类,构造函数, 方法和领域 以任何方式删除、添加或更改, 包括他们的文件,当 比较了两个 API。这是非常 有助于准确描述有什么 在 a 的两个版本之间更改 产品。只有 API(应用程序 每个版本的编程接口) 进行比较。它不比较什么 源代码在执行时执行。

据我了解,它在旧版本的源文件夹上运行并生成一个 xml 文件。新版本的源文件夹也是如此。然后比较两个 xml 输出并编译更改列表。在 html-javadoc-api-style 中

【讨论】:

  • JDiff 在代码的 Javadoc 上运行,而不是在代码上运行。它是 Clirr 的好伴侣(如果您可以信任 Javadoc),并且在相关项目 (clirr.sourceforge.net/related.html) 中提到了它。但我更喜欢在代码级别工作的东西。
【解决方案5】:

您可能还想试试japicmp

【讨论】:

    【解决方案6】:

    试试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/

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-15
      • 2017-07-18
      • 1970-01-01
      • 2016-04-06
      • 1970-01-01
      • 2013-02-11
      • 2013-01-09
      相关资源
      最近更新 更多