Maven:编辑父亲的POM依赖关系(排除或更新其版本)

时间:2017-09-07 21:56:53

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

好的,我会付出很多努力来解释并发症。我正在研究一个项目,让我们说" A"。这个项目有另外两个项目作为依赖项,让我们说" B"和" C"。所以,Project-A的POM是这样的:

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

Project-B和Project-C都使用模块,让我们说&#34; module-X&#34;。 Project-B POM在版本2上将此模块-X作为依赖项,因此Project-B POM是这样的:

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

但是,Project-C从另一个父项目继承了版本1上的这个模块-X依赖项,因此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中,在使用模块-X的Project-B函数中,此函数使用版本_2,它使用从Project-C导入的version_1(当然还会弹出一个错误。)

如果出现以下情况,问题就解决了:
a)一切都在版本_2上使用module-X b)project-B使用version_2而project-C使用version_1,而这两者没有混淆。

除了我的(项目-A)之外,我无法更改任何其他POM。我尝试在项目C依赖项上使用排除项(对于模块-X),但它没有用,因为模块-X不存在于项目C的POM中,而是存在于其父项中。

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

1 个答案:

答案 0 :(得分:0)

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

这将使A取决于指定的X版本。例如,如果A创建一个war,那么该war将包含指定版本的X jar。

请注意,如果两个不同版本的X彼此不兼容,那么您在C中调用的代码可能会出现问题(并且maven无法做到这一点)。请参阅this question for related information