我在父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中定义,然后在孩子的时候提到,如果需要的话。
答案 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>