2008-10-29 168 views
44

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

有没有办法来释放FOO项目无论依赖快照的项目,如果没有我怎么能添加一个时间戳第三方项目?

回答

7

简短的回答是看following answer ....长的答案是你可以解决它。

我在过去应对的唯一方法是有效地分叉第三方库并自己发布一个版本。这当然说起来容易做起来难,如果图书馆庞大而复杂,而且如果第三方图书馆是封闭的源代码则不可能。一条更容易的路线可能会接近第三方,并要求他们减少发布。

另一种选择可能是复制他们的POM(确保它没有快照)改变版本信息,并手动安装POM和工件在你的资料库。

+5

不完全正确,请参阅其他答案,通过`-DignoreSnapshots = true`可以告诉maven甚至可以释放快照依赖关系。你应该避免这样做,只有在绝对没有其他选择时才会这样做,是另一回事。 – 2013-11-22 01:14:18

+0

Sonatype的建议是部署到本地存储库http://blog.sonatype.com/2009/01/best-practices-for-releasing-with-3rd-party-snapshot-dependencies/#.UstQinlq5t0 – 2014-01-07 00:59:26

-2

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

6

以前的答案建议将组和工件ID ...当这种依赖被释放,你会在这两个副本最终没有这样做,因为行家不会承认它作为同一工件后类路径。我的首选方法是只更改版本,我会做这样的:[原始版本] - [我的组织名称] - [svn版本我拉它],所以我得到像1.0-SONATYPE-3425的东西。通过使用svn rev,我总是可以再次获取源代码并在需要时进行修补,并且确切知道我正在使用的是什么,而无需将整个源代码放入我自己的svn中。

更新 - 我blogged关于这一阵子回来。

138

问题与allowTimestampedSnapshots参数名称有关,它在文档中,但插件的源在表达式中使用了不同的参数名称 - ignoreSnapshots

所以只使用-DignoreSnapshots=true和准备发行的插件目标会忽略快照依赖。

12

使用的

-DignoreSnapshots=true 

代替

-DallowTimestampedSnapshots=true 

在我的情况下帮助行家释放小插件选项,这将允许使用与依赖快照版本准备和执行释放。

这个选项应该非常小心处理,因为使用快照版本释放以后可以打破你的版本中,如果依赖快照更新,在正常情况下,是不是你想要的。

相关问题