2011-12-15 27 views
8

Tôi đã tạo các lớp với XMLBeans từ một tệp xsd và đóng gói chúng trong tệp jar. sau đó tôi đã thêm jar đó vào classpath của project trong eclipse và mọi thứ biên dịch và chạy tốt. tôi đã xây dựng một đế file jar mình từ dự án của tôi với Maven và một lần nữa xây dựng thành công, nhưng khi tôi cố gắng chạy nó tôi nhận được lỗi này:Lỗi khi sử dụng các lớp đã tạo XmlBeans

Exception in thread "main" java.lang.ExceptionInInitializerError 
    at com.oblicore.oblisync.resolutions.TestsDocument$Factory.parse(TestsDo 
cument.java:126) 
    at com.oblicore.oblisync.handlers.TransferEntitiesHandler.getResolution(
TransferEntitiesHandler.java:117) 
    at com.oblicore.oblisync.handlers.TransferEntitiesHandler.resolveConflic 
ts(TransferEntitiesHandler.java:103) 
    at com.oblicore.oblisync.main.Orchestrator.run(Orchestrator.java:107) 
    at com.oblicore.oblisync.main.Orchestrator.main(Orchestrator.java:58) 
Caused by: java.lang.RuntimeException: Cannot load SchemaTypeSystem. Unable to l 
oad class with name schemaorg_apache_xmlbeans.system.s8B21CFFFCFED0B2438C2585C61 
F113F7.TypeSystemHolder. Make sure the generated binary files are on the classpa 
th. 
    at org.apache.xmlbeans.XmlBeans.typeSystemForClassLoader(XmlBeans.java:7 
83) 
    at com.oblicore.oblisync.resolutions.TestsDocument.<clinit>(TestsDocumen 
t.java:19) 
    ... 5 more 
Caused by: java.lang.ClassNotFoundException: schemaorg_apache_xmlbeans.system.s8 
B21CFFFCFED0B2438C2585C61F113F7.TypeSystemHolder 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:303) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
    at org.apache.xmlbeans.XmlBeans.typeSystemForClassLoader(XmlBeans.java:7 
69) 
    ... 6 more 

Lớp thiếu là trong jar tôi tạo ra với XMLBeans, làm thế nào để tôi nói với maven để thêm nó vào jar nó tạo ra từ dự án của tôi?

Trả lời

3

Trong tệp jar đã tạo của bạn, hãy đảm bảo bạn đã đưa các tệp lớp được tạo từ xmlbeans của bạn.

Từ stacktrace:

Caused by: java.lang.ClassNotFoundException: schemaorg_apache_xmlbeans.system.s8 
B21CFFFCFED0B2438C2585C61F113F7.TypeSystemHolder 

nó cho thấy rằng trong suốt thời gian biên dịch các tập tin lớp học cần thiết là trong classpath nhưng trong jar xây dựng của bạn những tập tin bị thiếu.

Kiểm tra tệp jar của bạn để xem các lớp này có hiện diện không.

EDIT: Theo câu hỏi rephrased

Đối với việc xây dựng jar với dependecies trong Maven sử dụng jar-with-dependencies tùy chọn, example

Hai rất tốt tài liệu tham khảo:

  1. http://www.sonatype.com/books/mvnref-book/reference/assemblies-sect-basics.html

  2. http://thomassundberg.wordpress.com/2011/03/05/create-an-executable-jar-from-maven/

Trong một giây bạn không cần một lớp học chính nếu jar của bạn không phải là một jar thực thi

+0

Tôi đã refrased câu hỏi của tôi để giải thích tốt hơn những gì tôi cần – Tomer

+0

Để xây dựng jar với phụ thuộc bạn có thể sử dụng maven-lắp ráp plugin, nơi bạn cần phải xác định tất cả các lọ nó nên bao gồm, mẫu pom có ​​thể được tìm thấy ở đây http: // maven.apache.org/plugins/maven-assembly-plugin/descriptor-refs.html – mprabhat

+1

Khi bạn xây dựng một dự án JAR với Maven, JAR chỉ chứa các lớp từ dự án đó. Nó không chứa các JAR cần thiết để xây dựng nó, cũng như các JAR cần thiết để thực thi (chủ yếu, nhưng không phải luôn luôn là các JAR). Tuy nhiên, nếu bạn đóng gói dự án của mình như là một WAR hoặc EAR, Maven sẽ bao gồm tất cả các JAR mà POM của bạn liệt kê dưới dạng các phụ thuộc thời gian chạy. Nếu bạn không cần một WAR hoặc EAR, thì đề xuất lắp ráp-plugin ở trên là đơn giản hơn (sử dụng tùy chọn jar-with-dependencies). –

3

Vui lòng thêm bên dưới thẻ trong pom.xml. Lỗi wil đi

 <!-- 
      this tells maven to copy the openejb-javaagent jar into your target/ 
      directory 
     --> 
     <!-- where surefire can see it --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.1</version> 
      <executions> 
       <execution> 
        <id>copy</id> 
        <phase>process-resources</phase> 
        <goals> 
         <goal>copy</goal> 
        </goals> 
        <configuration> 
         <artifactItems> 
          <artifactItem> 
           <groupId>org.apache.openejb</groupId> 
           <artifactId>openejb-javaagent</artifactId> 
           <version>3.0-beta-2</version> 
           <outputDirectory>${project.build.directory}</outputDirectory> 
          </artifactItem> 
         </artifactItems> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
    <resources> 
     <resource> 
      <directory>target/generated-sources/axis2/wsdl2code/resources</directory> 
     </resource> 
     <resource> 
      <directory>target/generated-sources/xmlbeans/resources</directory> 
     </resource> 
     <resource> 
      <directory>src/main/resources</directory> 
     </resource> 
    </resources> 
</build> 
4

Khi bạn có loại lỗi Các TypeSystemHolder.class tạo ra bởi WSDL2Java không được đặt trong classpath của bạn để tránh lỗi này.

Vui lòng sao chép TypeSystemHolder.class từ thư mục "resource/schemaorg_apache_xmlbeans/system/s68C41DB812F52C975439BA10FE4FEE54".

Và Dán TypeSystemHolder.class tập tin vào thư mục classpath của bạn (build/classes/schemaorg_apache_xmlbeans/system/s68C41DB812F52C975439BA10FE4FEE54) thư mục

4

Trong khi làm WSDL2Java một thư mục nguồn lực được đặt tên sẽ được tạo ra. Sao chép schemaorg_apache_xmlbeans trình bày theo tài nguyên cho classpath của dự án của bạn. Điều này cần được sửa chữa.

0

Bình chiết xuất mà bạn muốn bao gồm schemaorg_apache_xmlbeans thư mục. Sao chép schemaorg_apache_xmlbeans thư mục trong thư mục được trích xuất (kết quả từ trích xuất jar). dấu nhắc lệnh mở trong thư mục được trích xuất.

tạo lại jar bằng lệnh jar cf. ví dụ: jar cf test.jar *, để bao gồm tất cả các thư mục.

Triển khai bình đó.

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