我想使用maven发布插件发布一个快照项目'foo-1.0-SNAPSHOT'。该项目取决于尚未发布的第三方模块“bar-1.0-SNAPSHOT”。 我在项目的pom.xml中使用'allowTimestampedSnapshots'选项来允许带时间戳的快照,但我认为第三方模块(bar)没有时间戳,除非我自己构建它,因为maven仍然抱怨未解决的SNAPSHOT依赖关系。
有没有办法释放项目foo而不管依赖SNAPSHOT项目,如果没有,我怎么能为第三方项目添加时间戳?
答案 0 :(得分:147)
问题在于allowTimestampedSnapshots
参数名称,它在文档中,但插件的源代码在表达式中使用了不同的参数名称 - ignoreSnapshots
。
所以只需使用-DignoreSnapshots=true
,发布插件的准备目标将忽略快照依赖。
答案 1 :(得分:17)
使用maven-release-plugin选项
-DignoreSnapshots=true
而不是
-DallowTimestampedSnapshots=true
在我的情况下帮助,这将允许使用快照版本的依赖项来准备和执行发布。
应该非常小心地处理此选项,因为如果快照依赖项已更新,则在发行版中使用快照版本可能会在以后中断发布,这在正常情况下不是您想要的。
答案 2 :(得分:8)
简短的回答是following answer ....长的答案是你可以解决它。
我过去应对的唯一方法是有效地分叉第三方库并自行删除版本。这当然说起来容易做起来难以理解,如果第三方库是闭源的,那么如果图书馆庞大而复杂则不可能。一个更容易的途径可能是接近第三方并要求他们削减释放。
另一种选择可能是复制他们的pom(确保它没有快照)更改版本信息并在存储库中手动安装pom和工件。
答案 3 :(得分:6)
之前的回答建议更改组和工件ID ...不要这样做,因为maven不会在以后释放此依赖关系时将其识别为相同的工件,并且您将在类路径上最终获得两个副本。我首选的方法是只更改版本,我会做类似的事情:[原始版本] - [我的组织名称] - [svn版本我拉它]所以我得到像1.0-SONATYPE-3425的东西。通过使用svn rev,我可以再次拉动源并在需要时对其进行修补,并确切地知道我正在使用什么而不将整个源都拉到我自己的svn中。
更新 - 我blogged关于这一段时间。
答案 4 :(得分:-2)
只需使用您拥有的pom安装jar。我通常会更改组和工件ID,以明确这不是正式版本,但这通常是解决您问题的最佳方法。