Ho un progetto con una dipendenza da costruttore HTTP, questo mi dà l'albero followoing dipendenze:Perché Maven scegliere la versione 1.0.b2 oltre 1.3.03
[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
Dopo aggiungo hibernate-EntityManager, la versione di xml-apis:aml-apis
modifiche. Improvvisamente Maven preferisce utilizzare la versione 1.0b2, che è una dipendenza transitiva via 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
A causa di questo, io ora ottenere la seguente eccezione durante il runtime:
java.lang.IncompatibleClassChangeError:
Class org.apache.xerces.parsers.AbstractSAXParser$LocatorProxy
does not implement the requested interface org.xml.sax.Locator
so che posso risolvere il problema da aggiungere manualmente la dipendenza con il buon numero di versione nel mio pom.xml, ma mi chiedo il motivo per cui è necessaria questa:
<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>1.3.03</version>
</dependency>
In effetti, questo è esplicitamente menzionato nei documenti che ho notato ora: http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html –
'xml-apis' è sempre un soglia del dolore. L'ultima versione di Java in cui era effettivamente richiesto era 1.4 (poiché Java 5 le classi rilevanti sono state nella libreria di classi JRE per impostazione predefinita) ma così tante cose diverse dipendono da esso in così tante versioni in conflitto. Vorrei che ci fosse un modo per specificare un'esclusione globale - "ignorare tutte le dipendenze su xml-apis indipendentemente da dove venissero". –
xml-apis non è l'unico punto di dolore rilevante qui ... xercesImpl è famigerato. Scappa via se puoi. – eis