防止在Maven child pom中覆盖依赖版本

时间:2013-01-25 11:45:22

标签: maven maven-3

我在父pom中有一个dependencyManagement部分,如

<dependencyManagement>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.2.1</version>
    </dependency>
</dependencyManagement>

和一个孩子pom,有它

<dependencies>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.0</version>
    </dependency>
</dependencies>

我试图使用enforcer plugin阻止这种覆盖在poms中的poms,允许这些只在父级中设置,但是无法设置。我希望这会使构建失败。这可能,使用该插件或其他方式?

DependencyCovergence,它强制所有版本都相同,但这样的限制性太强,因为我不想控制所有传递依赖 - 只是明确定义的那些。

如果我可以阻止在子pom中引入任何新的依赖关系,我会很高兴 - 所有定义的内容都应该在父pom中定义,然后在孩子的时候提到,如果需要的话。

1 个答案:

答案 0 :(得分:10)

您可以在父pom中添加dependency:analyze-dep-mgt执行,并将其配置为在版本不匹配时失败:

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.6</version>
        <executions>
          <execution>
            <id>analyze</id>
            <phase>package</phase>
            <goals>
              <goal>analyze-dep-mgt</goal>
            </goals>
            <configuration>
              <failBuild>true</failBuild>
              <ignoreDirect>false</ignoreDirect>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>