Maven Release Plugin不在dependencyManagement中更新SNAPSHOT

Con*_*nan 6 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>
Run Code Online (Sandbox Code Playgroud)

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

我看到了这个问题:为什么maven发布插件允许SNAPSHOT版本的依赖管理?,但提到的门票声称在早期版本的插件中修复.

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"
Run Code Online (Sandbox Code Playgroud)

car*_*ing 1

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

<dependencies/>和部分之间的区别<dependencyManagement/>在于后者仅定义将使用的版本。也就是说,如果您在那里定义了 -s ,则发布插件根本不关心SNAPSHOT,除非该父项目是聚合器或聚合器的一部分,并且该父项目与聚合器作为一个整体发布。

同样,maven-release-plugin 也不关心<pluginManagement/>. 另外,我相信它仅解决包含工件版本的 Maven 属性,仅当这些属性与<dependencies/>.

更糟糕的是——据我记得——如果依赖项/插件有版本SNAPSHOT,如果它在一个<*Management/>部分中,你甚至不会收到警告。

出于这个原因,我所采用的方法是拥有一个<properties/>包含工件版本的父 POM。在发布它之前,我SNAPSHOT使用 grep 扫描它的 -s :

grep SNAPSHOT pom.xml
Run Code Online (Sandbox Code Playgroud)