【问题标题】:Preventing overriding dependency version in Maven child pom防止在 Maven 子 pom 中覆盖依赖版本
【发布时间】:2013-01-25 11:45:22
【问题描述】:

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

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

还有一个孩子,拥有它

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

我已经尝试使用enforcer plugin 防止在子 pom 中发生这种覆盖,只允许在父级中设置这些,但无法做到。我希望这个构建失败。用那个插件或其他方式有可能吗?

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

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

【问题讨论】:

  • 我想知道是否有人知道是否有某种方法可以做到这一点。就个人而言,我暂时想不出。
  • 编写新的执行者规则是可能的。

标签: maven maven-3


【解决方案1】:

您可以在父 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>

【讨论】:

  • 是的。就像我问的那样,这确实可以防止覆盖依赖管理中定义的版本。谢谢!现在,我只希望我可以完全阻止在子 pom 中声明不在依赖管理部分中的任何依赖关系。也许那是为了自定义规则。
  • 虽然它是手动且忙碌的,但如果父 pom 中已经存在依赖,您仍然可以通过强制插件的禁止依赖规则实现在子 pom 中不添加依赖。您需要在此处提及您在父项中定义的所有依赖项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 2020-07-12
  • 2017-10-25
相关资源
最近更新 更多