如何解决仅在不包含本地解决方案的情况下,Maven 执行器依赖融合?
我不得不禁用 dependencyConvergence
规则,因为它鼓励数以百万计的 <excludes>
,一旦出现就必须永远维护。我想要的是这条规则只强调缺乏收敛不受控制的地方;当前项目未提供明确版本(通过 <dependencies>
或 <dependencyManagement>
)。
这可能吗?
#1 d
可能不知道 commons-lang3 来自两个不同的具有冲突版本的传递 deps。 Enforcer 应该标记这一点。
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
#2 d
已明确包含 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>
doesn't work transitively (MNG-5761) 所以任何嵌套的分辨率都会丢失。
解决方法
只需将版本放入 <dependencyManagement>
。
那么执行者规则很高兴,不会抛出收敛错误。
顺便说一句:您很少需要排除来管理依赖项,只需 <dependencyManagement>
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。