是否有自动生成界面更改列表的方法?

时间:2015-01-14 06:39:55

标签: java

我正在开发/维护一个Java库,并希望跟踪版本之间的向后兼容的变化。此列表可能包含类声明,方法签名等的更改。

例如,如果我(意外地)通过添加参数来更改构造函数,那么我希望将其包含在列表中并收到有关更改的警告。

// before
public MyCar(String name) { ... }

// after (some accidental change)
public MyCar(String name, long mileage) { ... }
// an application using my library depending on this constructor would be broken
// when it updates to the new version

是否有自动生成此列表的方法?感觉就像IntelliJ或Gradle应该能做的事情。

我的团队已尝试审核拉取请求并手动维护CHANGELOG(这似乎是一种常见方法),但这很容易出现人为错误。我寻求一种理想情况下可以成为构建系统一部分的自动化方法。

2 个答案:

答案 0 :(得分:3)

我一直手动维护兼容性列表,但有时候会遗忘。

快速浏览一下几个开源库,但他们近10年来没有发布新版本。所以我不知道他们是否可以使用新的Java 7或8功能。

注意:我从未使用过任何这些!

CLIRR - 一些其他apache项目使用的apache项目来显示已经发生了什么变化(来自apache commons-lang here的示例输出。2005年最后一次更新甚至没有使用Maven 2构建(或者3)

JDiff javadoc doclet比较器。可能支持Java 5.最后更新于2008年

Japitools - 显然是由GNU Classpath项目用来比较它们的API,以便与不同版本的Sun Java类库签名兼容。看起来自2006年以来一直没有更新

答案 1 :(得分:1)

有一种更好的方法。

通过@Deprecated注释您的方法,保留一段时间的向后兼容性,并指出它们何时不受支持。然后将@deprecated部分添加到您的Javadoc,这将是最终用户需要关注的automatically generate a list of deprecated features

这有一个额外的好处,允许您介绍何时引入功能(@since),以及什么时候删除功能,而不必大肆渲染太多其他工具。

由于你已经添加了一个更具体的代码示例,我将再添加一个注释:那些类型的更改......是有意识的设计决策的结果,它带来了两个问题:

  • 回归测试(如测试中应该发现的那样)
  • 轻松过渡到更新的API(如果我需要突然为此获得一个新的参数以获得功能,这不是一件新事物而不是附加到旧的遗留物上吗?)< / LI>

任何传统工具都无法摆脱这些问题;这需要认真讨论从一个API转换到另一个API所需的时间。如果您发现需要向核心引入新功能,那么您最好确定没有破坏旧版本的情况。

这就是拥有API的意思 - 你 让旧版本潜伏一段时间。