Maven Release Plugin不在dependencyManagement中更新SNAPSHOT

时间:2012-06-07 17:52:35

标签: java maven maven-release-plugin

我有一个公司范围的父pom,其中<dependencyManagement>部分定义了应该在我的应用程序中使用的项目版本,其中一些是SNAPSHOT,有点像这样:

<dependencyManagement>
  <dependencies>
    ...
    <dependency>
      <groupId>my.group</groupId>
      <artifactId>myArtifact</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
    ...
  <dependencies>
</dependencyManagement>

当我在父pom上运行release:prepare时,不会删除这些SNAPSHOT。结果是从父级继承的项目在被释放时不能使用它的版本。当我发布时,如何确保更新父pom的<dependencyManagement>部分?

我看到了这个问题:why does maven release plugin allow for SNAPSHOT version in dependency managment?,但提到的故障单声称在早期版本的插件中得到修复。

Maven Release Plugin 2.3.1
Apache Maven 3.0.4 (r1232337; 2012-01-17 08:44:56+0000)
Java version: 1.6.0_31, vendor: Sun Microsystems Inc.
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"

2 个答案:

答案 0 :(得分:1)

所以你试图发布不属于你正在准备的构建的工件吗?如果您进行了重新设置:执行,如果插件不存在,插件应该上传到存储库? (如果他们这样做,你为什么要放快照版本?)。我认为@khmarbaise说,插件不会删除不属于你的反应堆的SNAPSHOTS(该插件可能认为它们是第三方依赖) 。

这是一个评论,我把它作为答案,因为我没有声誉发表评论 ...对不起我的英语!

答案 1 :(得分:1)

maven-release-plugin仅关注检查SNAPSHOT部分中是否有<dependencies/> - s。 <dependencies/>将由扩展此父级的所有模块继承。在构建之前,他们总是会尝试解决这些依赖关系。

<dependencies/><dependencyManagement/>部分之间的区别在于后者仅定义将要使用的版本。这就是说,如果你在那里定义了SNAPSHOT,那么发布插件就完全没有了,除非这个父项目是聚合器或聚合器的一部分,并且这个父节点与聚合器一起作为一个整体发布。 / p>

同样,maven-release-plugin不会处理<pluginManagement/>。此外,我认为只有当这些属性与<dependencies/>相关时才会解决包含工件版本的Maven属性。

更糟糕的是 - 据我所知 - 如果依赖项/插件具有SNAPSHOT版本,如果它位于<*Management/>部分,您甚至不会收到警告。

出于这个原因,我采用的方法是让父POM的<properties/>包含工件的版本。在发布之前,我使用grep:

扫描SNAPSHOT - s
grep SNAPSHOT pom.xml