Java 使用XmlBeans生成的类时出错

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

我已经从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
线程“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、 g
    jar 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,并将其作为常规依赖项包含在内,一切工作都很顺利。