如何发布依赖于maven中的第三方SNAPSHOT项目的项目

我想用maven release插件发布一个快照项目“foo-1.0-SNAPSHOT”。 该项目取决于尚未发布的第三方模块“bar-1.0-SNAPSHOT”。 我在我的项目的pom.xml中使用选项'allowTimestampedSnapshots',以允许时间戳快照,但我认为第三方模块(酒吧)是没有时间戳,除非我自己构build,因为maven仍抱怨未解决的SNAPSHOT依赖项。

有没有一种方法来释放项目foo,而不pipe依赖SNAPSHOT项目,如果不是,我怎么能添加一个时间戳到第三方项目?

简短的回答是看到下面的答案 ….长的答案是你可以解决它。

我过去所应对的唯一方法就是有效地分离第三方库,并自己裁减版本。 这当然说起来容易做起来难,如果图书馆庞大而复杂,而且如果第三方图书馆是封闭的来源,那么这是不可能的。 一个更容易的途径可能会接近第三方,并要求他们减less释放。

另一个select可能是复制他们的pom(确保没有快照),更改版本信息,并手动在存储库中安装pom和工件。

问题在于allowTimestampedSnapshots参数名称,它在文档中,但插件的源代码在expression式中使用了不同的参数名称 – ignoreSnapshots

因此,只需使用-DignoreSnapshots=true ,发布插件的准备目标将忽略快照依赖关系。

使用maven-release-plugin选项

 -DignoreSnapshots=true 

代替

 -DallowTimestampedSnapshots=true 

在我的情况下,这将允许使用快照版本的依赖关系来准备和执行发布。

应该非常仔细地处理这个选项,因为如果更新快照依赖项,那么在发行版中使用快照版本可能会在以后中断发布,而在正常情况下,这不是您想要的。

以前的答案build议更改组和工件ID …不要这样做,因为Maven在稍后释放此依赖时将不会将其识别为相同的工件,并且在类path中最终会有两个副本。 我的首选方法是只改变版本,我会做这样的事情:[原始版本] – [我的组织名称] – [svn版本我拉它],所以我得到像1.0-SONATYPE-3425的东西。 通过使用svn rev,我总是可以再次获取源代码,并在需要时对其进行修补,并确切知道我正在使用的是什么,而无需将整个源代码放入我自己的svn。

更新 – 我博客了一阵子。

只要安装你自己的POMjar子。 我通常会更改组和工件ID,以明确这不是正式版本,但这通常是解决您的问题的最佳解决scheme。