在不更改版本的情况下检测不兼容的 API 更改

Posted

技术标签:

【中文标题】在不更改版本的情况下检测不兼容的 API 更改【英文标题】:Detect an incompatible API change without version change 【发布时间】:2015-04-11 20:48:26 【问题描述】:

我在 Java - Maven - Jenkins 项目上使用语义版本控制,因此,每当完成不兼容的 API 更改时,都应该更改产品的主要版本。 我正在寻找一种自动化的方式来检测这种变化,这样如果发生这种变化,maven 构建就会失败(或者甚至自动增加版本)。谷歌搜索让我正在编写自己的maven enforcer plugin 规则,但我想问是否有人知道任何可以提供帮助的工具(Jenkins 插件或类似的也可以)。

【问题讨论】:

我建议看看animal-sniffer-plugin ? 我已经这样做了,但它并没有达到我想要的效果。它检查您的代码是否针对较旧/较新的依赖项 API 进行编译 还有 clirr 插件:mojo.codehaus.org/clirr-maven-plugin 做类似的事情。 这正是我想要的,谢谢!您可以将其发布为答案吗? 【参考方案1】:

一年过去了,但我希望这可以帮助将来的人。 根据wemu 的评论,我发现了这个:

Clirr

命令行:http://clirr.sourceforge.net/ Maven 插件:http://www.mojohaus.org/clirr-maven-plugin/ SonarQube 插件:http://docs.sonarqube.org/display/PLUG/Clirr+Plugin

Java API 合规性检查器

命令行:https://github.com/lvc/japi-compliance-checker

Revapi(支持 Java 8)

首页:http://revapi.org Maven 插件:https://github.com/revapi/revapi 附加信息:http://massol.myxwiki.org/xwiki/bin/view/Blog/ByeByeCLIRRWelcomeRevapi

japicmp(支持 Java 8)

命令行/Maven 插件:http://siom79.github.io/japicmp/

【讨论】:

Revapi 似乎是这些中更好的选择。

以上是关于在不更改版本的情况下检测不兼容的 API 更改的主要内容,如果未能解决你的问题,请参考以下文章

如何在不破坏向后兼容性的情况下更改 DataContract 属性的类型?

在不使用委托方法的情况下检测 UITextView 和/或 UITextField 上的 SELECTION 更改

如何允许客户端在不更改应用代码的情况下更改 iOS 应用中的 API 基本 URL?

如何在不更改版本的情况下更新 Filenet 文档的内容?

在不更改版本号的情况下更新 android 应用

我们可以在不更改 APP 版本的情况下更新 Google Play Store 上的 APK