java - 清理代码会破坏二进制兼容性

标签 java versioning checkstyle binary-compatibility

我正在开发一个项目,该项目正在被许多我不认识的人使用。我们在降低 CheckStyle 警告方面做得相当不错,并且在不破坏二进制兼容性的情况下将其降低到最低水平。

其余的大部分警告是由常量(public static final)缺少final关键字引起的。常量的命名清楚地表明开发人员希望它们是只读的,但它们根本没有最终定义。

除非开发人员正在编写一些利用这种疏忽的非常糟糕的代码,否则如果我们添加它们,他们的代码就不会中断。

目前版本号为1.2.1。您会应用更改并转到 2.0,还是应用更改并将其推出为 1.3。似乎需要完整的 2.0 进行很小的更改。

我应该做什么?

最佳答案

在我看来,像这样可能破坏二进制兼容性的更改应该推迟到主要版本发布为止。也就是说,您的问题不应该是“我应该使用什么版本号”,而应该是“我应该什么时候进行这些更改”。

如果您完全致力于二进制兼容性,则应该推迟这些更改,直到发布包含重大改进以证明升级成本合理的版本。例如,KDE 项目对主要版本施加了二进制兼容性要求。这意味着该版本生命周期内的任何改进都不会破坏针对旧版本编译的应用程序。因此,希望清理代码的开发人员必须等到下一个主要版本。

一旦您准备好发布包含所有精彩新功能的主要版本,请继续进行您认为必要的任何二进制兼容性更改,在这种情况下,如果出现问题,也不会那么令人惊讶。

如果你想聪明点,你可以实现一个预处理器并编译代码两次,一次带 final ,一次不带 final 。这可以作为真正 final 的垫脚石,但同时维护成本会很高。

关于java - 清理代码会破坏二进制兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1590560/

相关文章:

java - 检查样式缩进违规 - 'public' 缩进级别 4 不正确,预期级别应为 8

java - Eclipse/RAD 运行菜单消失

java - 如何根据关键字将解析的 JSON 消息的内容存储到字符串变量中?

java - 在 JEditorPane 中获取可见文本

java - 通过套接字使用 java 对象流的问题

c# - VS2005 : How to automatically generate a build number with date?

.net - 是否可以在同一进程中加载​​两个版本的 .NET 运行时?

maven - 禁用 Maven 检查样式

r - 如何使用同一个 R 包的多个版本?

maven - Checkstyle 在 Maven 中工作,但在 Jenkins 中不起作用