2010-09-30 8 views
6

Ho uno strano problema quando provo a eseguire una generazione di maven che usa il plugin jaxb2 per fare codegen JAXB (vedi stacktrace sotto). Il meglio che riesco a capire è che c'è un'implementazione di DTMManager che viene caricata in classe da un JAR diverso da quello di xalan-2.7.1; tuttavia, ho verificato che il classpath utilizzato per l'esecuzione di jaxb: genera solo l'obiettivo xalan-2.7.1.jar che contiene un DTMManager o un DTMManagerDefault - quindi non ho idea di cosa altro potrebbe ottenere nel modo in cui .ClassCastException in casting DTMManagerDefault in DTMManager durante maven jaxb codegen

Un ultimo punto di dati: la nostra build specifica un profilo 'istantanea', che in realtà serve solo a JARare i sorgenti (usando maven-source-plugin) e pubblicarli come artefatti. Lo scenario di errore che ho descritto sopra solo si verifica quando questo profilo è specificato in aggiunta al valore predefinito.

Sto usando Maven 2.2.1 in esecuzione su JDK 1.6.0_21 di Sun a 64 bit su Linux x64 (Fedora 13) - vedi sotto lo stacktrace per le informazioni 'mvn -v'.

Qualche idea su quale potrebbe essere il problema e/o su come risolverlo? Questo è stato mi ha causato dolore per i giorni scorsi ed è ora bloccando il progresso :(

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" 

risposta

13

La soluzione è la ricerca di tutte le dipendenze da Xalan e xercesImpl nel .. classpath Queste dipendenze dovrebbero essere esclusi

Aggiornato

ho trovato una risposta come questo - vedere 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

Ciao, puoi spiegare come posso fare questo? Ho lo stesso problema con Debian + Jboss e non posso ripararlo su Linux, ma funziona bene su Windows/Mac. Grazie. –

+1

Esegui {mvn dependency: tree> dependencies.txt} quindi aggiungi exclude alle dipendenze per i jar che devono essere esclusi. – raisercostin

3

per escludere la xalan e xercesImpl dipendenze in 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> 

Vedi anche https://community.jboss.org/wiki/FreeMarkerAndJBossAS7.