gpt4 book ai didi

java - Maven 引入 POM 中未指定的依赖项

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:38:37 25 4
gpt4 key购买 nike

我有一个由父 POM 和几个子模块组成的 Maven 项目。它在 Intellij 中编译和运行良好(我假设它使用 javac 而不是 Maven)。

当我运行 maven clean install 时,由于来自 the documentation 的“RequireUpperBoundDeps”导致构建失败表示构建期间解析的版本低于同一 Artifact 的依赖项版本。这是(经过 sanitizer 的)输出:

[INFO] --- maven-enforcer-plugin:1.4:enforce (enforce-maven) @ my-service ---
[WARNING] Rule 1: org.apache.maven.plugins.enforcer.RequireUpperBoundDeps failed with message:
Failed while enforcing RequireUpperBoundDeps. The error(s) are [
Require upper bound dependencies error for com.h2database:h2:1.3.168 paths to dependency are:
+-com.example.services:my-service:1.0.0-SNAPSHOT
+-com.h2database:h2:1.3.168
and
+-com.example.services:my-service:1.0.0-SNAPSHOT
+-com.example.libs:my-libs:2.0.0
+-com.h2database:h2:1.3.168 (managed) <-- com.h2database:h2:1.4.190
]

这似乎暗示 h2my-service 的直接依赖项,但在任何 poms、模块或父级中都没有这样声明。 h2 应该只来自 my-libs。此外,它声称 h2 被“管理”为版本 1.3.168。我不知道它从哪里得到这些信息。 my-libs 使用 h2 版本 1.4.190

我尝试从一个全新的 .m2 目录开始,从 my-libs 依赖项中排除 h2,明确包括 h2my-service 下(两个版本)。没有任何效果,从依赖项中排除 h2 会导致我的一个与数据库交互(通过 JDBI)的类出现 NoSuchPropertyException

如何让 Maven 识别正确的 h2 版本以包含并成功构建我的项目?

最佳答案

有人写了一篇很棒的文章HERE提供并了解正在发生的事情和可能的解决方案。这是摘要-

对于错误中的这个deps树

+-com.example.services:my-service:1.0.0-SNAPSHOT
+-com.example.libs:my-libs:2.0.0
+-com.h2database:h2:1.3.168 (managed) <-- com.h2database:h2:1.4.190

com.example.services:my-service 项目依赖于 com.h2database:h2 Artifact 的 1.3.168 版本。此外,com.example.libs:my-libs 需要相同的 Artifact 但版本不同 - 1.4.190

在您的 pom (升级场景)

中声明 com.h2database:h2:1.3.168

注意:这可能不是适合所有项目的解决方案。

或者,您可以从 com.example.libs:my-libs 中排除 com.h2database:h2:1.4.190。这样,com.example.libs:my-libs 将最终使用 com.h2database:h2:1.3.168 中的旧版本 (降级方案)

要执行后者,您的 pom 条目将如下所示:


<dependency>
<groupId>com.example.libs</groupId>
<artifactId>my-libs</artifactId>
<version>2.0.0</version>
<exclusions>
<exclusion>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</exclusion>
</exclusions>
</dependency>

这是您必须根据您的项目做出的决定。我通常首先使用 mvn dependency:tree 进行一些调查。

关于java - Maven 引入 POM 中未指定的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37264938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com