【问题标题】:How can I find the root cause of my never ending maven dependency hell?我怎样才能找到我永无止境的 Maven 依赖地狱的根本原因?
【发布时间】:2014-11-10 22:51:17
【问题描述】:

我在 Eclipse IDE 中有一个 maven java 项目,它需要与 weblogic 服务器上的组件进行通信。当我第一次编写此代码时,它无需导入太多 jar 即可工作。但是,我需要让我的项目成为更大程序集的一部分,现在我的依赖要求已经失控。我对 maven 以及它如何与 eclipse 集成仍然有点陌生,但我发现我的大多数 ClassNotFoundExceptions 指向确实存在的类,但路径略有不同。见下图。

我怀疑我在依赖项的开头某处导入了错误的库,现在这似乎依赖于实际上已经存在但使用另一条路径的类的大树结构,我被困在检索中他们每个人都是单独的,当他们已经在那里时......

只看图片:我有 com.sun.xml.internal.bind.marshaller.SAX2DOMEx.class,但没有 com.sun.xml.bind.marshaller.SAX2DOMEx.class

当我应该专注于解决原因时,我是否正确地假设我正在尝试解决症状?如果是这样,我如何追溯我的导入并找到根本原因,换句话说,我从哪里开始导入错误的 jar?

【问题讨论】:

  • 嗨@KjetilNordin,我在下面的回答解决了您的问题吗?
  • 确实如此。谢谢!

标签: maven jar dependencies weblogic11g


【解决方案1】:

@KjetilNordin,

你写道:

I've found that most of my ClassNotFoundExceptions points to classes that do exist, but with slight variances in path

这表明在此过程中,您所依赖的一个或多个 jar 有 2 个冲突的版本,类在不同的包之间移动。 Maven 的依赖解析机制将 jar 解析为该类位于与您期望的不同包中的版本。

在您的项目上运行 mvn dependency:tree 以查看组织的传递依赖关系的整个层次结构,以便您可以跟踪什么依赖于什么。您可能会看到您的 jar 出现在多个位置,并且可能是错误的版本在 Maven 版本解析方面具有优先权。

接下来决定要使用哪个版本。

最后,在您的pom.xml 文件中添加一个<dependencyManagement> 块以强制版本与您所需的版本匹配。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多