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)。
答案 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插件?它可能有这样的东西,或者你可以写一个自定义规则。