使用XmlBeans生成的类时出错
我已经从xsd文件生成了XMLBeans类,并将它们打包在一个jar文件中。 然后我把这个jar添加到eclipse中的项目类路径中,一切都编译好了。 我使用Maven从我的项目中构建了一个独立的jar文件,并且构建成功,但是当我尝试运行它时,我收到此错误:
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.(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
缺少的类是在我用XmlBeans创建的jar中,我如何告诉maven将它添加到它从我的项目创建的jar中?
在生成的jar文件中,确保已包含从xmlbeans生成的类文件。
来自堆栈跟踪:
Caused by: java.lang.ClassNotFoundException: schemaorg_apache_xmlbeans.system.s8 B21CFFFCFED0B2438C2585C61F113F7.TypeSystemHolder
它表明在编译期间所需的类文件在类路径中,但在您构建的jar中,这些文件丢失了。
检查您的jar文件以查看是否存在这些类。
编辑:按照问题重新编写
要在Maven中构建具有jar-with-dependencies
jar,请使用jar-with-dependencies
选项, 例如
两个非常好的参考:
-
http://www.sonatype.com/books/mvnref-book/reference/assemblies-sect-basics.html
-
http://thomassundberg.wordpress.com/2011/03/05/create-an-executable-jar-from-maven/
在第二个中,如果你的jar不是可执行的jar,你不需要主类
在执行WSDL2Java时,将创建名为resources的目录。 将在资源下显示的schemaorg_apache_xmlbeans复制到项目的类路径。 这应该是修复。
当您遇到此类错误时,WSDL2Java生成的TypeSystemHolder.class不会放在类路径中以避免此错误。
请从“resource / schemaorg_apache_xmlbeans / system / s68C41DB812F52C975439BA10FE4FEE54”文件夹中复制TypeSystemHolder.class。
并将TypeSystemHolder.class文件粘贴到您的classpath文件夹(build / classes / schemaorg_apache_xmlbeans / system / s68C41DB812F52C975439BA10FE4FEE54)文件夹中
请在pom.xml中添加以下标记。 错误将走了
org.apache.maven.plugins maven-dependency-plugin 2.1 copy process-resources copy org.apache.openejb openejb-javaagent 3.0-beta-2 ${project.build.directory} target/generated-sources/axis2/wsdl2code/resources target/generated-sources/xmlbeans/resources src/main/resources
提取要包含schemaorg_apache_xmlbeans
文件夹的jar。 复制schemaorg_apache_xmlbeans
压缩文件夹中的schemaorg_apache_xmlbeans
文件夹(来自jar提取的结果)。 在解压缩文件夹中打开命令提示
使用jar cf命令再次制作jar。 例如jar cf test.jar *
,包括所有文件夹。
部署那个jar。