我们有1家公司的父母pom。这使用dependencyManagement来管理所有使用的工件的所有依赖项的版本。
令人担忧的是,SNAPSHOT版本可以在dependencyManagement中定义。虽然执行maven释放时,允许在dependencyManagement中使用SNAPSHOT版本释放pom。为什么?
如果我将子项目指向公司父pom的已发布版本,并且此子项目使用dependencyManagement中定义的依赖项,虽然它是SNAPSHOT版本,但我无法发布子项目。
为什么Maven允许发布在dependencyManagement中定义的工件的SNAPSHOT版本?如果定义了SNAPSHOT版本,如何配置maven发布插件失败?
答案 0 :(得分:3)
令人担忧的是,SNAPSHOT版本可以在dependencyManagement中定义。虽然执行maven释放时,允许在dependencyManagement中使用SNAPSHOT版本释放pom。为什么呢?
我希望maven-release-plugin在发布时更新dependencyManagement
中的SNAPSHOT版本。实际上,有一些关于此问题的Jira,例如MRELEASE-91和MRELEASE-202可能会对您产生影响。
所以问题是:你使用的是哪个版本的插件?
但说实话,我不清楚哪些版本受MRELEASE-202影响,评论令人困惑(所以我想知道问题是否已修复)。无论如何,如果您使用的版本受到影响,请升级到更新版本。如果错误/回归(我认为这是一个错误)仍然存在,那么提出一个新问题。
答案 1 :(得分:0)
我没有答案为什么' (我个人认为这是一个错误),但我有办法防止这种情况发生:使用Maven Enforcer插件。
名为smartics(小写s)的公司已创建规则(NoSnapshotDependenciesInDependencyManagementRule)以防止出现此问题。
您基本上需要将以下内容添加到父POM中:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.4.1</version>
<executions>
<execution>
<id>enforce-project-rules</id>
<phase>test</phase>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<NoSnapshotDependenciesInDependencyManagementRule
implementation="de.smartics.maven.enforcer.rule.NoSnapshotsInDependencyManagementRule">
<onlyWhenRelease>true</onlyWhenRelease>
<checkOnlyResolvedDependencies>false</checkOnlyResolvedDependencies>
</NoSnapshotDependenciesInDependencyManagementRule>
</rules>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>de.smartics.rules</groupId>
<artifactId>smartics-enforcer-rules</artifactId>
<version>1.0.2</version>
</dependency>
</dependencies>
</plugin>