maven;如何打破向后兼容性?
Maven有一个版本管理系统,如果引用多个版本,它会选择最高版本的库。例如,如果一个pom指的是版本1.1,而pom B指向1.2,那么pom C(指的是A和B)将使用最高版本; 1.2。maven;如何打破向后兼容性?
该方法假设1.2与1.1向后兼容100%,这是一个很好且必需的方法。但是,在图书馆生命周期的某些时候,清理商店是明智的。对于我来说,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)。
我会更改工件ID(可能通过添加主版本号)。这将使1.x和2.x版本与Maven不同。
首先这是一个不好的做法在Maven的使用version ranges进一步构建你必须定义一个版本编号定义它说1.0和1.1必须向后兼容,而2.0是不是但这是你必须做出一个定义。 Maven不知道这一点。我会建议使用Major.Minor.Increment-Qualifier等。在我看来,你应该固定你的版本修复,否则你无法重现你的构建。
Gentoo通过引入槽的概念解决了这个问题http://devmanual.gentoo.org/general-concepts/slotting/index.html – Tbee 2011-04-05 17:48:00
你看过maven执行者插件吗?它可能有这样的事情,或者你可以写一个自定义规则。
我不明白你想要完成什么。如果需要不兼容的版本,你是否试图让构建中断?或者,你是否试图让maven解决旧版本...? – jtahlborn 2011-04-05 17:15:17
如果存在使用相同库的不兼容版本的两个依赖项,则构建应该失败。 – Tbee 2011-04-05 18:16:00
不可能在类路径中包含两个依赖.jar文件,只有第一个依然会被使用。无论Maven的行为如何,您所要求的都是不可能的。 – 2011-09-01 19:55:23