2010-09-30 3 views
6

Je rencontre un problème étrange lorsque j'essaie d'exécuter une build maven qui utilise le plugin jaxb2 pour faire du codegen JAXB (voir stacktrace ci-dessous). Le mieux que je peux comprendre est qu'il y a une implémentation de DTMManager qui est en cours de chargement à partir d'un JAR différent de celui de xalan-2.7.1; cependant, j'ai vérifié que le chemin de classe qui est utilisé pour exécuter l'objectif jaxb: generate a seulement le xalan-2.7.1.jar qui contient un DTMManager ou un DTMManagerDefault - donc je n'ai aucune idée de ce qui pourrait être gênant . Un point de données final: notre build spécifie un profil 'snapshot', qui sert uniquement à JARER les sources (en utilisant maven-source-plugin) et à les publier comme des artefacts. Le scénario de défaillance que j'ai décrit ci-dessus seulement se produit lorsque ce profil est spécifié en plus de la valeur par défaut. J'utilise Maven 2.2.1 sur le JDK 1.6.0_21 64 bits de Sun sous Linux x64 (Fedora 13) - voir ci-dessous la piletrace pour l'information 'mvn -v'.ClassCastException dans le moulage DTMManagerDefault dans DTMManager pendant maven jaxb codegen

Des idées sur ce que le problème peut être et/ou comment s'y prendre pour le déboguer? Cela a été me cause la douleur pour les derniers 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" 

Répondre

13

La solution est de rechercher toutes les dépendances sur Xalan et xercesImpl dans la .. classpath Ces dépendances doivent être exclus

Mise à jour

J'ai trouvé une réponse comme ça - voir http://www.mail-archive.com/[email protected]/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 
+0

Bonjour, pouvez-vous expliquer comment je peux faire cela? J'ai le même problème avec Debian + Jboss et je ne peux pas le réparer sous Linux, mais ça marche bien sur Windows/Mac. Merci. –

+1

Exécutez {mvn dependency: tree> dependencies.txt} puis ajoutez exclure à vos dépendances pour les jars qui doivent être exclus. – raisercostin

3

Pour exclure les xalan et xercesImpl dépendances 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.

Questions connexes