2010-09-30 25 views
6

Tôi đang gặp vấn đề lạ khi cố gắng chạy trình xây dựng maven sử dụng plugin jaxb2 để thực hiện JAXB codegen (xem stacktrace bên dưới). Điều tốt nhất mà tôi có thể hình dung là có một số thực hiện của DTMManager đó là lớp được nạp từ một JAR khác với một trong xalan-2.7.1; tuy nhiên, tôi đã xác minh rằng classpath được sử dụng để chạy jaxb: generate goal chỉ có một xalan-2.7.1.jar có chứa một DTMManager hoặc một DTMManagerDefault - vì vậy tôi không có đầu mối nào khác có thể cản trở .ClassCastException trong truyền DTMManagerDefault vào DTMManager trong maven jaxb codegen

Một điểm dữ liệu cuối cùng: bản dựng của chúng tôi chỉ định tiểu sử 'ảnh chụp nhanh', thực sự chỉ phục vụ để JAR up nguồn (sử dụng maven-source-plugin) và xuất bản chúng dưới dạng tạo phẩm. Kịch bản lỗi mà tôi đã mô tả ở trên chỉ xảy ra khi cấu hình này được chỉ định ngoài mặc định.

Tôi đang sử dụng Maven 2.2.1 chạy trên JDK 1.6.0_21 64 bit của Sun trên Linux x64 (Fedora 13) - xem bên dưới ngăn xếp cho thông tin 'mvn -v'.

Bất kỳ ý tưởng nào về vấn đề có thể là gì và/hoặc cách gỡ lỗi? Điều này đã được gây cho tôi đau buồn trong vài ngày qua và nó bây giờ chặn tiến bộ :(

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" 

Trả lời

13

Giải pháp là để tìm kiếm cho tất cả phụ thuộc vào Xalan và xercesImpl trong .. classpath Những phụ thuộc nên được loại trừ

Cập nhật

tôi tìm thấy một câu trả lời như thế này - xem 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

Xin chào, bạn có thể giải thích cách tôi có thể thực hiện việc này không? Tôi có cùng một vấn đề với Debian + Jboss và không thể sửa chữa nó trên Linux, nhưng hoạt động tốt trên Windows/Mac. Cảm ơn. –

+1

Chạy {mvn dependency: tree> dependencies.txt} sau đó thêm loại trừ vào các phụ thuộc của bạn cho các lọ cần loại trừ. – raisercostin

3

Để loại trừ xalanxercesImpl phụ thuộc vào 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> 

Xem thêm https://community.jboss.org/wiki/FreeMarkerAndJBossAS7.

Các vấn đề liên quan