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

eis*_*eis 7 maven-3 maven

我在父pom中有一个dependencyManagement部分

<dependencyManagement>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.2.1</version>
    </dependency>
</dependencyManagement>
Run Code Online (Sandbox Code Playgroud)

拥有它的孩子pom

<dependencies>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.0</version>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

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

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

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

FrV*_*aBe 10

您可以在父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>
Run Code Online (Sandbox Code Playgroud)

  • 是.这确实可以防止覆盖依赖管理中定义的版本,就像我问的那样.谢谢!现在,我只希望能够防止在不依赖管理部分的子poms中声明任何依赖关系.那么也许那就是自定义规则. (2认同)
  • 虽然它是手动的和忙碌的,但你仍然可以通过执行器插件的bannedDependencies规则实现在子pom中不添加依赖,如果已经存在于父pom中。您需要在此处提及您在 parent 中定义的所有依赖项。 (2认同)