Maven有一个版本管理系统,如果引用多个版本,它将选择库的最高版本。例如,如果pom指的是版本1.1和pom到1.2,那么pom (同时指A和B)将使用最高版本;1.2。
这种方法假设1.2是100%向后兼容1.1,这是一个很好的和必需的方法。然而,在库的生命周期中的某些时候,清理商店是明智的。对我来说,API中的任何重大更改都意味着增加主要版本,所以2.0不需要100%向后兼容最新的1.x。很好。
然而,Maven并不在乎,如果pom从1.2升级到2.0,那么Maven将使用2.0,但是pom不能使用该版本。
如何告诉Maven一个版本不再向后兼容?
我已经尝试指定排除范围,所以A引用[1.1,1.999],B引用[2.0,2.999)。但是,Maven仍然解决了最大版本号(2.0)。
发布于 2011-04-05 17:15:54
首先,在Maven构建中使用版本范围是一种糟糕的做法,而且您还必须定义一个版本编号定义,其中规定1.0和1.1必须向后兼容,而2.0不是,但这是您必须要做的定义。Maven不知道这事。我建议使用Major.Minor.Increment-Qualifier等。在我看来,您应该将您的版本修复,否则您无法复制您的构建。
发布于 2011-04-05 17:12:32
我会更改工件ID (可能通过添加主版本号)。这将使1.x和2.x版本与Maven不同。
发布于 2011-04-07 17:36:31
你查过maven执行器插件了吗?它可能有类似的内容,或者您可以编写自定义规则。
https://stackoverflow.com/questions/5555395
复制相似问题