ClassCastException dans la coulée DTMManagerDefault dans DTMManager pendant maven JAXB codegen
-
26-09-2019 - |
Question
Je vais avoir un problème étrange lorsque vous essayez de lancer un build Maven qui utilise le plugin jaxb2 pour faire JAXB codegen (voir stacktrace ci-dessous). Le mieux que je peux comprendre est qu'il ya une mise en œuvre de DTMManager qui est d'être classe chargée d'un autre JAR que celui-xalan 2.7.1; cependant, j'ai vérifié que le classpath qui est utilisé pour exécuter le JAXB: goal generate a seulement une xalan-2.7.1.jar qui contient un DTMManager ou un DTMManagerDefault - donc je n'ai pas la moindre idée de ce qui pourrait bien être prendre le chemin .
Un point de données final: notre build spécifie un « instantané » profil, qui sert vraiment qu'à JAR aussi les sources (à l'aide-source-plugin Maven) et les publier sous forme d'artefacts. Le scénario d'échec que je décrit ci-dessus uniquement se produit lorsque ce profil est spécifié en plus de la valeur par défaut.
J'utilise Maven 2.2.1 en cours d'exécution sur Linux x64 64 bits JDK de Sun 1.6.0_21 (Fedora 13) -. Voir ci-dessous la stacktrace pour le 'mvn -v' info
Toutes les idées sur ce que le problème peut être et / ou comment aller sur le débogage il? Cela a été me cause la douleur depuis quelques jours et il bloque maintenant les progrès: (
java.lang.ClassCastException: org.apache.xml.dtm.ref.DTMManagerDefault cannot be cast to org.apache.xml.dtm.DTMManager
at org.apache.xml.dtm.DTMManager.newInstance(DTMManager.java:137)
at org.apache.xpath.XPathContext.<init>(XPathContext.java:102)
at org.apache.xpath.jaxp.XPathImpl.eval(XPathImpl.java:207)
at org.apache.xpath.jaxp.XPathImpl.evaluate(XPathImpl.java:281)
at com.sun.tools.xjc.reader.internalizer.Internalizer.buildTargetNodeMap(Internalizer.java:224)
at com.sun.tools.xjc.reader.internalizer.Internalizer.buildTargetNodeMap(Internalizer.java:289)
at com.sun.tools.xjc.reader.internalizer.Internalizer.transform(Internalizer.java:134)
at com.sun.tools.xjc.reader.internalizer.Internalizer.transform(Internalizer.java:96)
at com.sun.tools.xjc.reader.internalizer.DOMForest.transform(DOMForest.java:448)
at com.sun.tools.xjc.ModelLoader.buildDOMForest(ModelLoader.java:342)
at com.sun.tools.xjc.ModelLoader.loadXMLSchema(ModelLoader.java:374)
at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:167)
at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:113)
at org.jvnet.jaxb2.maven2.XJC2Mojo.runXJC(XJC2Mojo.java:1119)
at org.jvnet.jaxb2.maven2.XJC2Mojo.execute(XJC2Mojo.java:720)
...
mvn -v:
# mvn -v
Apache Maven 2.2.1 (r801777; 2009-08-06 14:16:01-0500)
Java version: 1.6.0_21
Java home: /usr/java/jdk1.6.0_21/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "2.6.33.3-85.fc13.x86_64" arch: "amd64" Family: "unix"
La solution
La solution consiste à rechercher toutes les dépendances sur Xalan et xercesImpl dans le classpath. Ces dépendances doivent être exclus.
Mise à jour
J'ai trouvé une réponse comme ça - voir http: // www.mail-archive.com/dev@qpid.apache.org/msg07295.html
Had a look at this closely and figured it was due to a classpath class
due to Sun bundling an older version of Xalan jar.
I have disabled this test until we come up with a decent solution.
Rajith
Autres conseils
Pour exclure les dépendances de xalan
et xercesImpl
Maven:
<dependency> <!-- ClassNotFoundException: org.jaxen.dom.DOMXPath -->
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.3</version>
<exclusions>
<exclusion>
<artifactId>maven-findbugs-plugin</artifactId>
<groupId>maven-plugins</groupId>
</exclusion>
<exclusion>
<artifactId>maven-cobertura-plugin</artifactId>
<groupId>maven-plugins</groupId>
</exclusion>
<!-- ClassCastException: org.apache.xml.dtm.ref.DTMManagerDefault -> org.apache.xml.dtm.DTMManager -->
<exclusion>
<artifactId>xercesImpl</artifactId>
<groupId>xerces</groupId>
</exclusion>
<exclusion>
<artifactId>xalan</artifactId>
<groupId>xalan</groupId>
</exclusion>
</exclusions>
</dependency>
Voir aussi https://community.jboss.org/wiki/FreeMarkerAndJBossAS7 .