简单的Maven澄清;我希望经验丰富的Maven开发人员能够轻松回答这个问题。
我有两个名为mycompany-x和mycompany-y的项目。 mycompany-x被列为mycompany-y的依赖项,每个版本都有1.0-SNAPHSOT版本。我们的Maven构建由连续构建服务器部署到内部Maven存储库。每个快照都通过此服务器在开发人员之间共享。我们正在使用Maven 3。
在任何给定时间,当我运行mycompany-y的安装目标时,mycompany-x的存储库中可能有两个jar:one,标记为1.0-SNAPSHOT,这是本地构建的结果;第二个,标记为1.0-,从我们的Maven存储库下载为1.0-SNAPHSOT的解决方案。当mycompany-y尝试解析mycompany-x的1.0-SNAPSHOT时,这会产生明显的歧义;我非常肯定Maven社区有一个明确的政策要解决(尽管在文档中并不清楚)。
在以下场景中,哪个jar(本地或远程)包含在构建的类路径中?
注意:Maven: How to ensure timestamped versions of snapshots are used in classpath?引用已发布的算法,我似乎无法在任何地方找到它。我会接受一个链接作为一个很好的答案。
答案 0 :(得分:3)
以下是我在其他帖子中提到的链接 - Maven Dependency Resolution - A Repository Perspective。
请注意,即使使用Maven中的3.0.x系列,此分辨率(遗憾)也会随着时间的推移而发生变化。有关以下问题,请参阅Maven release notes:
[MNG-4987] - [回归]当解析顺序与时间戳顺序不匹配时,从错误的存储库中选择LATEST,RELEASE或SNAPSHOT版本 [MNG-4592] - 由于通信问题而无法下载的快照工件默认情况下被“列入黑名单”一天。 [MNG-4751] - 未针对版本范围解析快照版本
configuration values for SNAPSHOT resolution也会影响事情。
以下是another poster dealing with SNAPSHOT
的示例 唉,即使你搞清楚了,你也要向团队中的其他开发者解释一切。我们如何解决这个问题:我们只允许在CI上构建的项目声明固定的依赖项,而不是在CI上使用SNAPSHOT依赖项。我们使用Maven Release Plugin生成一个版本(非SNAPSHOT)单击事件。开发人员可以(并且应该)让SNAPSHOT在本地相互引用,但是将远程存储库完全保留在其中。