【问题标题】:Maven: Edit parent's POM dependency (exclude or update its version)Maven:编辑父级的 POM 依赖项(排除或更新其版本)
【发布时间】:2018-02-16 17:48:40
【问题描述】:

好的,我会花很多精力来解释复杂性。我正在做一个项目,比如说“A”。该项目有两个其他项目作为依赖项,比如说“B”和“C”。所以,Project-A 的 POM 是这样的:

<Project A>
    <dependencies>
        <dependency>Project B</dependency>
        <dependency>Project C</dependency>
    </dependencies>
</Project A>

Project-B 和 Project-C 都使用一个模块,比如说“module-X”。 Project-B POM 在版本 2 上有这个 module-X 作为依赖项,所以 Project-B POM 是这样的:

<Project B>
    <dependencies>
        <dependency>ModuleX_version_2</dependency>
    </dependencies>
</Project B>

但是,Project-C 从另一个父项目继承了这个 module-X 对版本 1 的依赖,所以 Project-C POM 类似于:

<Project C>
    <parent>
        < Project-C-Parent >
    </parent>
</Project C>

最后 Project-C-Parent 是这样的:

<Project C-Parent>
    <dependencies>
        <dependency>ModuleX_version_1</dependency>
    </dependencies>
</Project C-Parent>

发生的冲突如下:在 Project-A 中,在使用 module-X 的 Project-B-function 中,此函数使用 version_2 它使用从 Project-C 导入的 version_1 (当然会弹出错误)。

如果满足以下条件,问题将得到解决:
a) 一切都在 version_2 上使用 module-X。
b) 项目-B 使用版本_2,项目-C 使用版本_1,这两者不会混淆。

除了我的(项目-A)之外,我无权更改任何其他 POM。我尝试在 project-C 依赖项上使用排除项(针对 module-X),但它不起作用,因为 module-X 不在 project-C 的 POM 中,而是在其父级中。

那么,有什么想法吗?谢谢!

【问题讨论】:

    标签: java maven jakarta-ee intellij-idea dependencies


    【解决方案1】:

    在 A pom 中提及 X 的正确版本,将使用该版本。换句话说,将 X 依赖显式添加到 A pom.xml 中。这告诉 maven 你想要哪个版本的 X。

    这将使 A 依赖于 X 的指定版本。例如,如果 A 创建一个战争,那么该战争将包括 X jar 的指定版本。

    请注意,如果 X 的两个不同版本彼此不兼容,那么您在 C 中调用的代码可能会出现问题(而且 maven 对此无能为力)。见this question for related information

    【讨论】:

    • 不幸的是,我已经尝试过了,但没有成功,module_X 再次被包含在 version_1 中的 project-C 中,并且发生了同样的冲突......再次,在我的外部库树上有:-module_x_v2 -projectC(再次包括 module_x_v1)。不过感谢您的相关帖子:)
    猜你喜欢
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 2016-08-11
    • 1970-01-01
    • 2017-10-25
    相关资源
    最近更新 更多