使用 XmlBeans 生成的类时出错

2022-09-04 08:04:48

我从 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.<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

缺少的类在我用XmlBeans创建的jar中,我如何告诉maven将其添加到它从我的项目创建的jar中?


答案 1

在执行 WSDL2Java 时,将创建一个名为 resources 的目录。将资源下显示的schemaorg_apache_xmlbeans复制到项目的类路径。这应该是修复程序。


答案 2

在生成的 jar 文件中,确保包含从 xmlbean 生成的类文件。

从堆栈跟踪 :

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

它表明在编译期间,所需的类文件位于类路径中,但在构建的jar中缺少这些文件。

检查 jar 文件以查看这些类是否存在。

编辑:根据问题改写

要在 Maven 中使用选项构建具有依赖项的 jar,示例jar-with-dependencies

两个很好的参考:

  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/

在第二个中,如果你的jar不是可执行的jar,你不需要一个main类。


推荐