2010-09-30 9 views
6

Ich habe ein seltsames Problem, wenn Sie versuchen, eine Maven-Build, der das JAXB2-Plugin JAXB codegen tun ausführen (siehe StackTrace unten). Das Beste, was ich feststellen kann, ist, dass es eine Implementierung von DTMManager gibt, die von einer anderen JAR als der in xalan-2.7.1 geladen wird. Ich habe jedoch verifiziert, dass der Klassenpfad, der zum Ausführen des Ziels jaxb: generate verwendet wird, nur die eine xalan-2.7.1.jar enthält, die einen DTMManager oder einen DTMManagerDefault enthält - so habe ich keine Ahnung, was sonst noch im Weg stehen könnte .ClassCastException in DTMManagerDefault während Maven Jaxb Codegen

Ein letzter Datenpunkt: unser Build spezifiziert ein 'Snapshot'-Profil, das nur dazu dient, auch die Quellen zu jar (mit maven-source-plugin) und diese als Artefakte zu veröffentlichen. Das oben beschriebene Fehlerszenario nur tritt auf, wenn dieses Profil zusätzlich zum Standardwert angegeben wird.

Ich benutze Maven 2.2.1 läuft auf Suns 64-Bit-JDK 1.6.0_21 auf Linux x64 (Fedora 13) - siehe unten den Stacktrace für die 'MVN-V' Info.

Irgendwelche Ideen, was das Problem sein könnte und/oder wie man es debugging gehen? Dies wurde so daß ich in den letzten paar Tagen Trauer und jetzt ist es Fortschritte blockiert :(

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" 

Antwort

13

Die Lösung ist für alle Abhängigkeiten von Xalan und xercesImpl in der zur Suche .. classpath diese Abhängigkeiten ausgeschlossen werden sollten

ich fand wie diese eine Antwort aktualisiert - siehe 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

Hallo, können Sie erklären, wie kann ich das tun? Ich habe das gleiche Problem mit Debian + Jboss und kann es nicht unter Linux reparieren, aber es funktioniert gut unter Windows/Mac. Vielen Dank. –

+1

Führen Sie {mvn dependency: tree> dependencies.txt} aus, und fügen Sie dann exclude zu Ihren Abhängigkeiten für die jars hinzu, die ausgeschlossen werden sollen. – raisercostin

3

Um die xalan und xercesImpl Abhängigkeiten in Maven ausschließen:

<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> 

Siehe auch https://community.jboss.org/wiki/FreeMarkerAndJBossAS7.

Verwandte Themen