我怎样才能找到我永无止境的maven依赖地狱的根本原因?

时间:2014-11-10 14:05:03

标签: maven jar dependencies weblogic11g

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

enter image description here

我怀疑我在依赖项的开头某处导入了一个错误的库,现在似乎依赖于实际已经存在的Classes的一个很棒的大树结构,但是有了另一条路径,我就是这样当他们已经在那里时,他们会单独检索每一个......

看看图片:我有com.sun.xml。内部 .bind.marshaller.SAX2DOMEx.class,但不是com.sun.xml.bind.marshaller.SAX2DOMEx.class

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

1 个答案:

答案 0 :(得分:2)

@KjetilNordin,

您写道:

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

这表明,在此过程中,您所依赖的一个或多个罐子有两个相互冲突的版本,在这两个版本之间,类在不同的包之间移动。 Maven的依赖解析机制是将jar解析为类所在的版本,而不是您期望的类。

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

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

最后,在<dependencyManagement>文件中添加pom.xml块,以强制版本与您想要的版本相匹配。

希望有所帮助。