Java 使用XmlBeans生成的类时出错
我已经从xsd文件生成了带有XMLBeans的类,并将它们打包到jar文件中。然后,我将jar添加到eclipse中的项目类路径中,一切都可以正常编译和运行。 我用Maven从我的项目中构建了一个独立的jar文件,构建再次成功,但当我尝试运行它时,我得到了以下错误:Java 使用XmlBeans生成的类时出错,java,maven,xmlbeans,Java,Maven,Xmlbeans,我已经从xsd文件生成了带有XMLBeans的类,并将它们打包到jar文件中。然后,我将jar添加到eclipse中的项目类路径中,一切都可以正常编译和运行。 我用Maven从我的项目中构建了一个独立的jar文件,构建再次成功,但当我尝试运行它时,我得到了以下错误: Exception in thread "main" java.lang.ExceptionInInitializerError at com.oblicore.oblisync.resolutions.TestsDocu
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
线程“main”java.lang.ExceptionInInitializeError中的异常
在com.oblicore.oblisync.resolutions.TestsDocument$Factory.parse(TestsDo
java:126)
在com.oblicore.oblisync.handlers.TransferentiesHandler.getResolution上(
TransferentiesHandler.java:117)
位于com.oblicore.oblisync.handlers.TransferentiesHandler.resolveConflic
ts(transferentieshandler.java:103)
在com.oblicore.oblisync.main.Orchestrator.run(Orchestrator.java:107)上
位于com.oblicore.oblisync.main.Orchestrator.main(Orchestrator.java:58)
原因:java.lang.RuntimeException:无法加载SchemaTypeSystem。不可能
名为schemaorg_apache_xmlbeans.system.s8b21cffcfed0b2438c2585c61的oad类
F113F7.TypeSystemHolder。确保生成的二进制文件位于classpa上
th。
位于org.apache.xmlbeans.xmlbeans.typeSystemForClassLoader(xmlbeans.java:7
83)
在com.oblicore.oblisync.resolutions.TestsDocument.(TestsDocument
t、 爪哇:19)
... 还有5个
原因:java.lang.ClassNotFoundException:schemaorg_apache_xmlbeans.system.s8
B21CFFFCFED0B2438C2585C61F113F7.类型系统保持架
在java.net.URLClassLoader$1.run(URLClassLoader.java:200)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:188)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:303)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:248)
位于org.apache.xmlbeans.xmlbeans.typeSystemForClassLoader(xmlbeans.java:7
69)
... 还有6个
缺少的类在我用XmlBeans创建的jar中,我如何告诉maven将其添加到它从我的项目中创建的jar中?在生成的jar文件中确保包含了从XmlBeans生成的类文件 从stacktrace:
Caused by: java.lang.ClassNotFoundException: schemaorg_apache_xmlbeans.system.s8
B21CFFFCFED0B2438C2585C61F113F7.TypeSystemHolder
它表明,在编译时,所需的类文件位于类路径中,但在构建的jar中,这些文件丢失了
检查jar文件以查看这些类是否存在
编辑:根据重新表述的问题
要在Maven中构建具有依赖项的jar,请使用jarwithdependencies
选项
两个非常好的参考:
在第二个示例中,如果您的jar不是可执行jar,则不需要主类请在pom.xml中添加以下标记。错误将会消失
<!--
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>
org.apache.maven.plugins
maven依赖插件
2.1
复制
过程资源
复制
org.apache.openejb
openejb javaagent
3.0-beta-2
${project.build.directory}
目标/生成的源代码/axis2/wsdl2code/resources
目标/生成的源/xmlbeans/resources
src/main/resources
当您出现此类错误时
为了避免此错误,WSDL2Java生成的TypeSystemHolder.class不能放在类路径中
请从“resource/schemaorg_apache_xmlbeans/system/s68C41DB812F52C975439BA10FE4FEE54”文件夹复制TypeSystemHolder.class
并将TypeSystemHolder.class文件粘贴到您的classpath文件夹(build/classes/schemaorg_apache_xmlbeans/system/s68C41DB812F52C975439BA10FE4FEE54)文件夹中,执行WSDL2Java时将创建一个名为resources的目录。将参考资料下显示的schemaorg_apache_xmlbeans复制到项目的类路径。这应该是修复方法。提取要包含
schemaorg\u apache\u xmlbeans
文件夹的jar。
在提取的文件夹中复制schemaorg\u apache\u xmlbeans
文件夹(jar提取的结果)。
在提取的文件夹中打开命令提示符
使用jarcf命令再次创建jar。e、 gjar cf test.jar*
,
包括所有文件夹
部署那个罐子 我重新解释了我的问题,以便更好地解释构建具有依赖关系的jar需要什么。您可以使用maven assembly plugin,在这里您需要指定它应该包含哪些jar,示例pom可以在这里找到。当您使用maven构建jar项目时,jar只包含该项目中的类。它不包含构建它所需的jar,也不包含执行它所需的jar(大部分,但并不总是相同的jar)。但是,如果您将项目打包为WAR或EAR,Maven会将POM列出的所有JAR作为运行时依赖项。如果您不需要WAR或EAR,那么上面的程序集插件建议更简单(使用jar with dependencies选项)。您的回答非常有用,但我仍然无法让它对我起作用,因为maven程序集插件只包括安装在其存储库中并定义为依赖项的jar。因为我有一个从XmlBeans中自行生成的jar,所以我使用系统依赖项将其包括在内,但事实证明,程序集插件在jar文件中不包括system dep。因此,我只是在maven存储库中安装了jar,并将其作为常规依赖项包含在内,一切工作都很顺利。