web-dev-qa-db-ja.com

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.<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にありますが、プロジェクトから作成したjarに追加するようにmavenに指示するにはどうすればよいですか?

10
Tomer

生成されたjarファイルに、xmlbeansから生成されたクラスファイルが含まれていることを確認してください。

スタックトレースから:

Caused by: Java.lang.ClassNotFoundException: schemaorg_Apache_xmlbeans.system.s8
B21CFFFCFED0B2438C2585C61F113F7.TypeSystemHolder

コンパイル時に必要なクラスファイルがクラスパスにあるが、ビルドされたjarにはこれらのファイルがないことを示しています。

Jarファイルをチェックして、これらのクラスが存在するかどうかを確認してください。

編集:言い換えられた質問に従って

Mavenで依存関係のあるjarをビルドするには、jar-with-dependenciesオプションを使用します。

2つの非常に良いリファレンス:

  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/

2番目の例では、jarが実行可能jarでない場合、メインクラスは必要ありません。

4
mprabhat

WSDL2Javaを実行している間、resourcesという名前のディレクトリが作成されます。リソースの下にあるschemaorg_Apache_xmlbeansをプロジェクトのクラスパスにコピーします。これで修正されるはずです。

7
Common Man

この種のエラーが発生した場合このエラーを回避するために、WSDL2Javaによって生成されたTypeSystemHolder.classはクラスパスに配置されません。

TypeSystemHolder.classを「resource/schemaorg_Apache_xmlbeans/system/s68C41DB812F52C975439BA10FE4FEE54」フォルダーからコピーしてください。

そして、TypeSystemHolder.classファイルをクラスパスフォルダー(build/classes/schemaorg_Apache_xmlbeans/system/s68C41DB812F52C975439BA10FE4FEE54)フォルダーに貼り付けます。

4
Amit Yadav

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>
3
Manjunath

含めるjarを抽出しますschemaorg_Apache_xmlbeansフォルダ。コピーschemaorg_Apache_xmlbeans抽出されたフォルダー内のフォルダー(jar抽出の結果)。解凍したフォルダでコマンドプロンプトを開きます。

jarcfコマンドを使用してjarを再度作成します。例:jar cf test.jar *、すべてのフォルダを含めます。

そのjarをデプロイします。

0