57

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

无论依赖的 SNAPSHOT 项目如何,有没有办法发布项目 foo,如果没有,我如何向第 3 方项目添加时间戳?

4

5 回答 5

159

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

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

于 2010-10-18T13:14:48.513 回答
24

使用 maven-release-plugin 选项

-DignoreSnapshots=true

代替

-DallowTimestampedSnapshots=true

在我的情况下有所帮助,这将允许使用具有快照版本的依赖项来准备和执行发布。

应该非常小心地处理此选项,因为在发布中使用快照版本可能会在以后破坏您的发布,如果更新了快照依赖项,这在通常情况下不是您想要的。

于 2011-05-11T12:26:59.220 回答
10

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

我过去应对的唯一方法是有效地分叉 3rd 方库并自己删除一个版本。这当然说起来容易做起来难,如果图书馆又大又复杂,如果 3rd 方图书馆是封闭源代码的,这就是不可能的。更简单的方法可能是接近第 3 方并要求他们取消发布。

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

于 2008-10-31T17:26:53.637 回答
6

先前的答案建议更改组和工件 id...不要这样做,因为 maven 稍后在释放此依赖项时不会将其识别为相同的工件,并且您最终会在类路径上得到两个副本。我的首选方法是仅更改版本,我将执行以下操作:[原始版本]-[我的组织名称]-[我从中提取的 svn 版本],所以我得到类似 1.0-SONATYPE-3425 的内容。通过使用 svn rev,我可以随时再次拉取源代码并在需要时对其进行修补,并且确切地知道我正在使用什么,而无需将整个源代码拉入我自己的 svn。

更新 - 我不久前在博客上写过这个。

于 2008-11-08T16:26:41.980 回答
-2

只需使用您拥有的 pom 安装 jar。我通常会更改组和工件 ID,以明确这不是正式版本,但这通常是解决您问题的最佳方法。

于 2008-10-31T21:27:38.520 回答