我有一个公司范围的父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"
答案 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