gpt4 book ai didi

java - 为什么 Maven 选择版本 1.0.b2 而不是 1.3.03

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:43:26 24 4
gpt4 key购买 nike

我有一个依赖 HTTP BUilder 的项目,这为我提供了以下依赖树:

[INFO] +- org.codehaus.groovy.modules.http-builder:http-builder:jar:0.5.1:compile
[INFO] | +- org.apache.httpcomponents:httpclient:jar:4.3.2:compile
[INFO] | | \- commons-codec:commons-codec:jar:1.6:compile
[INFO] | +- net.sf.json-lib:json-lib:jar:jdk15:2.3:compile
[INFO] | | +- commons-beanutils:commons-beanutils:jar:1.8.0:compile
[INFO] | | +- commons-collections:commons-collections:jar:3.2.1:compile
[INFO] | | +- commons-lang:commons-lang:jar:2.4:compile
[INFO] | | \- net.sf.ezmorph:ezmorph:jar:1.0.6:compile
[INFO] | +- net.sourceforge.nekohtml:nekohtml:jar:1.9.9:compile
[INFO] | | \- xerces:xercesImpl:jar:2.8.1:compile
[INFO] | | \- xml-apis:xml-apis:jar:1.3.03:compile
[INFO] | \- xml-resolver:xml-resolver:jar:1.2:compile

添加hibernate-entitymanager后,xml-apis:aml-apis的版本发生了变化。突然之间,Maven 更喜欢使用 1.0b2 版本,它是通过 dom4j 的传递依赖:

[INFO] +- org.hibernate:hibernate-entitymanager:jar:4.3.1.Final:compile
[INFO] | +- org.jboss.logging:jboss-logging:jar:3.1.3.GA:compile
[INFO] | +- org.jboss.logging:jboss-logging-annotations:jar:1.2.0.Beta1:compile
[INFO] | +- org.hibernate:hibernate-core:jar:4.3.1.Final:compile
[INFO] | | +- antlr:antlr:jar:2.7.7:compile
[INFO] | | \- org.jboss:jandex:jar:1.1.0.Final:compile
[INFO] | +- dom4j:dom4j:jar:1.6.1:compile
[INFO] | | \- xml-apis:xml-apis:jar:1.0.b2:compile

因此,我现在在运行时遇到以下异常:

java.lang.IncompatibleClassChangeError: 
Class org.apache.xerces.parsers.AbstractSAXParser$LocatorProxy
does not implement the requested interface org.xml.sax.Locator

我知道我可以通过在我的 pom.xml 中手动添加具有良好版本号的依赖项来修复它,但我想知道为什么需要这样做:

    <dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>1.3.03</version>
</dependency>

最佳答案

默认情况下,当在依赖树中找到相同的依赖时,Maven 会使用最接近根的依赖。

在你的例子中,这意味着

 org.hibernate:hibernate-entitymanager:jar:4.3.1.Final:compile
\- dom4j:dom4j:jar:1.6.1:compile
\- xml-apis:xml-apis:jar:1.0.b2:compile

对比

 org.codehaus.groovy.modules.http-builder:http-builder:jar:0.5.1:compile
\- net.sourceforge.nekohtml:nekohtml:jar:1.9.9:compile
\- xerces:xercesImpl:jar:2.8.1:compile
\- xml-apis:xml-apis:jar:1.3.03:compile

或者换句话说,3 层深 vs 4 层深 所以 1.0.b2 获胜。

要解决此问题,请从对 hibernate-entitymanager 的依赖中排除 xml-apis 或明确声明对 xml-apis 的依赖(尽管您可能不得不尝试一下,但 Xerces 及其依赖项可能是版本对齐的噩梦)。

关于java - 为什么 Maven 选择版本 1.0.b2 而不是 1.3.03,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23268217/

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