防止在Maven子pom中重写依赖项版本

防止在Maven子pom中重写依赖项版本,maven,maven-3,Maven,Maven 3,我在家长pom中有一个DependencyManager部分,如 <dependencyManagement> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.2.1</version>

我在家长pom中有一个DependencyManager部分,如

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

org.apache.httpcomponents
,只允许在父级中设置,但无法设置。我希望这能使构建失败。这是可能的,用那个插件还是其他方式

有,这迫使所有版本都是相同的,但这太严格了,因为我不想控制所有可传递的依赖项——只控制显式定义的依赖项

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

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

  <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>

org.apache.maven.plugins
maven依赖插件
2.6
分析
包裹
分析部门管理
真的
假的

我想知道是否有人知道是否有办法做到这一点。就我个人而言,目前我想不出任何新的执行规则。写一个新的执行规则是可能的。是的。正如我所问的那样,这会阻止覆盖DependencyManager中定义的版本。非常感谢。现在,我只希望能够阻止在子POM中声明任何不在DependencyManager部分中的依赖项。也许这是为自定义规则,那么。虽然它是手动的和繁忙的,但你仍然可以实现没有依赖添加到子pom中,如果已经在父pom中通过bannedDependencies规则的enforcer插件。您需要在这里提及您在父级中定义的所有依赖项。
  <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>