行家;如何打破向后兼容性?

时间:2011-04-05 16:46:10

标签: java api maven build backwards-compatibility

Maven有一个版本管理系统,如果引用了多个版本,它会选择最高版本的库。例如,如果pom A引用版本1.1而pom B引用1.2,则pom C(指A和B)将使用最高版本; 1.2。

这种方法假设1.2向后兼容1.1,这是一个很好的必需方法。但是,在图书馆生命周期的某些时候,清理商店是明智之举。对我来说,API中的任何重大变化都意味着增加主要版本,因此2.0不需要100%向后兼容最新的1.x.细

然而,Maven并不关心,如果pom B从1.2升级到2.0,Maven会使用2.0,但是pom A不能用于那个版本。

如何告诉Maven版本不再向后兼容?

我已尝试指定排除范围,因此A指[1.1,1.999],B指[2.0,2.999]。但是,Maven仍然可以解决最大版本号(2.0)。

3 个答案:

答案 0 :(得分:3)

首先,在Maven Build中使用version ranges是一种不好的做法,此外你必须定义版本编号定义,其中1.0和1.1必须向后兼容,而2.0不是,但这是你必须做出的定义。 Maven不知道这一点。我建议使用Major.Minor.Increment-Qualifier等。在我看来,你应该修复你的版本,否则你将无法重现你的版本。

答案 1 :(得分:1)

我会更改工件ID(可能是通过添加主版本号)。这将使1.x和2.x版本成为与Maven不同的野兽。

答案 2 :(得分:0)

您是否查看了maven enforcer插件?它可能有这样的东西,或者你可以写一个自定义规则。