为什么maven发布插件允许依赖管理中的SNAPSHOT版本?

时间:2010-01-18 21:11:16

标签: maven-2 snapshot dependency-management maven-release-plugin

我们有1家公司的父母pom。这使用dependencyManagement来管理所有使用的工件的所有依赖项的版本。

令人担忧的是,SNAPSHOT版本可以在dependencyManagement中定义。虽然执行maven释放时,允许在dependencyManagement中使用SNAPSHOT版本释放pom。为什么?

如果我将子项目指向公司父pom的已发布版本,并且此子项目使用dependencyManagement中定义的依赖项,虽然它是SNAPSHOT版本,但我无法发布子项目。

为什么Maven允许发布在dependencyManagement中定义的工件的SNAPSHOT版本?如果定义了SNAPSHOT版本,如何配置maven发布插件失败?

2 个答案:

答案 0 :(得分:3)

  

令人担忧的是,SNAPSHOT版本可以在dependencyManagement中定义。虽然执行maven释放时,允许在dependencyManagement中使用SNAPSHOT版本释放pom。为什么呢?

我希望maven-release-plugin在发布时更新dependencyManagement中的SNAPSHOT版本。实际上,有一些关于此问题的Jira,例如MRELEASE-91MRELEASE-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>