10

我在父 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防止在子 pom 中发生这种覆盖,只允许在 parent 中设置这些,但无法做到。我希望这个构建失败。用那个插件或其他方式有可能吗?

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

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

4

1 回答 1

11

您可以在父 pom 中添加依赖项: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>
于 2013-01-30T15:32:17.157 回答