0

我不得不禁用该dependencyConvergence规则,因为它鼓励数以百万计的规则<excludes>一旦存在就必须永远维护。我想要的是这条规则只强调缺乏收敛是不受控制的;当前项目没有给出明确的版本(通过<dependencies><dependencyManagement>)。

那可能吗?

#1d可能不知道 commons-lang3 来自两个具有冲突版本的不同传递部门。执行者应该标记这一点。

Dependency convergence error for org.apache.commons:commons-lang3:3.0 paths to dependency are:
+-com.example:d:1.0-SNAPSHOT
  +-com.example:c:1.0-SNAPSHOT
    +-com.example:b:1.0-SNAPSHOT
      +-org.apache.commons:commons-lang3:3.0
and
+-com.example:d:1.0-SNAPSHOT
  +-com.example:e:1.0-SNAPSHOT
    +-org.apache.commons:commons-lang3:3.1

#2d已明确包含 3.1。不要标记这个。不要坚持<exclusions>把它放在适当的位置,说明我们想要什么,因为我们已经清楚地说明了版本想要什么

Dependency convergence error for org.apache.commons:commons-lang3:3.0 paths to dependency are:
+-com.example:d:1.0-SNAPSHOT
  +-com.example:c:1.0-SNAPSHOT
    +-com.example:b:1.0-SNAPSHOT
      +-org.apache.commons:commons-lang3:3.0
and
+-com.example:d:1.0-SNAPSHOT
  +-org.apache.commons:commons-lang3:3.1

#3 更巧妙的是,我认为c已经解决了与其后代的任何冲突。这不应该被标记。毕竟,如果c从那时开始运行相同的检查,那就是场景 #2。因此#2 是简单的情况#3。

Dependency convergence error for org.apache.commons:commons-lang3:3.0 paths to dependency are:
+-com.example:d:1.0-SNAPSHOT
  +-com.example:c:1.0-SNAPSHOT
    +-com.example:b:1.0-SNAPSHOT
      +-org.apache.commons:commons-lang3:3.0
and
+-com.example:d:1.0-SNAPSHOT
  +-com.example:c:1.0-SNAPSHOT
    +-org.apache.commons:commons-lang3:3.1

更新:#2<depdendencyManagement>仅适用于。一个重要的问题是<depdendencyManagement> 它不能传递地工作(MNG-5761),所以任何嵌套的分辨率都会丢失。

4

1 回答 1

1

只需将版本放入<dependencyManagement>.

然后执行者规则很高兴并且不会抛出收敛错误。

顺便说一句:您很少需要排除来管理依赖项,只需<dependencyManagement>.

于 2021-02-02T14:03:09.290 回答