gpt4 book ai didi

java - Maven 依赖顺序

转载 作者:太空狗 更新时间:2023-10-29 22:33:43 26 4
gpt4 key购买 nike

在我的项目中有一个实现接口(interface)的类。该接口(interface)来自依赖项。我有另一个依赖项,它本身依赖于也包含相同接口(interface)的 jar,除了具有更多方法的版本;包含相同包接口(interface)的两个 jar 不具有相同的 groupId 或 artifactId。
编译失败是因为编译器提示我项目中的类没有实现所有方法。我意识到这是因为编译器正在从错误的 jar 中获取接口(interface)引用。我的问题是,为什么 maven 使用传递依赖项中的接口(interface)而不是我在项目 POM 中明确提到的 jar 中的接口(interface)?我可以看到使用的 jar 出现在定义的前面(所以我也在类路径中想象),但我认为在这些情况下,maven 通过使用依赖项中的冲突类/接口(interface)和最短路径

解决了它

这是依赖树的一部分。 注意这是grepped但是还是可以看出javax.servlet:servlet-api(实际使用的那个)比tomcat在树中更深:servlet (应该使用的那个)

[builder@ca-rd-build11 proj]$ mvn dependency:tree | grep servlet
[INFO] | +- javax.servlet:servlet-api:jar:2.4:compile
[INFO] +- tomcat:servlet:jar:4.0.6:compile

我正在使用 maven 3.0.4

最佳答案

why is maven using the interface from the transitive dependency instead of the one from the jar that I explicitly mention in the project POM?

因为,对于Maven来说,两者没有任何关系。 Maven 不知道类名或包名,Maven 只知道 groupId 和 artifactId。由于它们不相同,因此 Maven 没有任何理由忽略传递依赖。

如果我是正确的,Maven 会按照它们定义的顺序将依赖项放在类路径中,即依赖项 a 的传递依赖项出现在依赖项 b 之前。

关于java - Maven 依赖顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12624892/

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