Maven 2 如何在maven中发布依赖于第三方快照项目的项目

Maven 2 如何在maven中发布依赖于第三方快照项目的项目,maven-2,versioning,release,snapshot,maven-release-plugin,Maven 2,Versioning,Release,Snapshot,Maven Release Plugin,我想使用maven发布插件发布一个快照项目“foo-1.0-snapshot”。该项目依赖于尚未发布的第三方模块“bar-1.0-SNAPSHOT”。 我在项目的pom.xml中使用“allowTimestampedSnapshots”选项来允许时间戳快照,但我假设第三方模块(bar)没有时间戳,除非我自己构建它,因为maven仍然抱怨未解决的快照依赖关系 有没有一种方法可以释放project foo,而不管依赖的快照项目是什么?如果没有,我如何才能向第三方项目添加时间戳?简短的回答是请参见。。

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


有没有一种方法可以释放project foo,而不管依赖的快照项目是什么?如果没有,我如何才能向第三方项目添加时间戳?

简短的回答是请参见。。。。答案很长,你可以解决它

我过去处理问题的唯一方法就是有效地利用第三方库,并亲自发布一个版本。当然,这说起来容易做起来难,如果库很大、很复杂,那么这是很困难的;如果第三方库是封闭源代码的,那么这是不可能的。一个更简单的途径可能是联系第三方并要求他们削减发布


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

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

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


不久前更新了-I。问题在于
allowTimestampedSnapshots
参数名,它在文档中,但插件的源代码在表达式中使用了不同的参数名-
ignoreSnapshots


所以只要使用
-DignoreSnapshots=true
,发布插件的准备目标就会忽略快照依赖项。

使用maven发布插件选项

-DignoreSnapshots=true
而不是

-DallowTimestampedSnapshots=true
在我的例子中,这有助于使用快照版本的依赖项来准备和执行发布


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

这是有效的,我相信这是正确的答案(OP正在寻找的答案)。可惜这没有足够的票数成为第一!当然,您并不是真的想要发布具有快照依赖关系的工件,因为您的消费者也需要找到该快照。如果您只是在测试套件(或类似套件)中使用快照,那么“-DignoreSnapshots=true”绝对是一个很好的解决方法。我几乎放弃了,直到我偶然发现这个!谢谢不完全正确,请参见其他答案,您可以通过
-DignoreSnapshots=true
告诉maven即使使用快照依赖项也要发布。您应该避免这样做,并且只有在绝对没有其他选择的情况下才这样做,这是另一回事