首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maven将依赖中介策略设置为最新的而不是最近的。

Maven将依赖中介策略设置为最新的而不是最近的。
EN

Stack Overflow用户
提问于 2015-12-10 11:49:13
回答 2查看 2.2K关注 0票数 19

我是否可以将Maven配置为选择冲突的“最新”依赖项,而不是“最近的”依赖项?

“最新”是常春藤和其他明智的依赖管理器中的缺省值,参见http://ant.apache.org/ivy/history/2.2.0/settings/conflict-managers.html

我发现“最近”的策略很少是我想要的。

我正在使用Maven 3.3.3,但如果有必要,我可以切换版本。

我知道如何在单个冲突中覆盖Maven的选择,但我更愿意更改默认设置,这样就不必每次检测和修复每个冲突。

(参见关于“依赖中介”的Maven博士 )

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-02 07:17:53

我可以将配置为在解决版本冲突时自动使用依赖项的“最新”版本而不是“最近”版本吗?

No,您不能将Maven的依赖中介策略配置为最接近的任何东西。

添加了以前曾提出过可配置依赖中介策略。,但最终被放弃了,因为该提案涉及更改POM,这已经有几年没有发生了。

为什么Maven使用最近的策略作为默认值?

最近的策略受到Maven的青睐,原因有二:

  1. 轻松覆盖单个冲突:对于任何特定的冲突依赖项,您可以在自己的POM中指定其版本,该版本将成为最近的版本。
  2. 可复制构建:依赖关系图中的任何地方的版本范围都可能导致构建不可复制。“最新”的中介策略将放大版本范围对构建可重用性的负面影响。

,但是我真的想要一个不同的依赖中介策略。我能做什么?

以下是你最好的选择:

  1. 使Maven扩展为:“最近”策略的使用由MavenRepositorySystemUtils指定。您可以使用创建自己的Maven扩展来定义实现您选择的策略的自己的VersionSelector,然后在扩展的afterSessionStart方法中,将会话的DependencyGraphTransformer替换为使用自定义VersionSelectorDependencyGraphTransformer
  2. 迁移到另一个构建工具:显然。
票数 14
EN

Stack Overflow用户

发布于 2017-04-04 22:12:38

您还可以为Maven "enforcer“插件使用"requireUpperBoundDeps“规则,它不会直接实现”最新胜利“冲突解决策略,但将强制执行最终结果是相同的。您需要手动将传递依赖项<exclusions><dependencyManagement>规则添加到POM中,以在每个冲突中选择最新的依赖项,但至少您将确信最终结果是“最新的胜利”。

代码语言:javascript
复制
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-enforcer-plugin</artifactId>
    <version>1.4.1</version>
    <executions>
      <execution>
        <id>enforce</id>
        <configuration>
          <rules>
            <requireUpperBoundDeps />
          </rules>
        </configuration>
        <goals>
          <goal>enforce</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34201120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档