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に指示するにはどうすればよいですか?
生成されたjarファイルに、xmlbeansから生成されたクラスファイルが含まれていることを確認してください。
スタックトレースから:
Caused by: Java.lang.ClassNotFoundException: schemaorg_Apache_xmlbeans.system.s8
B21CFFFCFED0B2438C2585C61F113F7.TypeSystemHolder
コンパイル時に必要なクラスファイルがクラスパスにあるが、ビルドされたjarにはこれらのファイルがないことを示しています。
Jarファイルをチェックして、これらのクラスが存在するかどうかを確認してください。
編集:言い換えられた質問に従って
Mavenで依存関係のあるjarをビルドするには、jar-with-dependencies
オプションを使用します。 例
2つの非常に良いリファレンス:
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/
2番目の例では、jarが実行可能jarでない場合、メインクラスは必要ありません。
WSDL2Javaを実行している間、resourcesという名前のディレクトリが作成されます。リソースの下にあるschemaorg_Apache_xmlbeansをプロジェクトのクラスパスにコピーします。これで修正されるはずです。
この種のエラーが発生した場合このエラーを回避するために、WSDL2Javaによって生成されたTypeSystemHolder.classはクラスパスに配置されません。
TypeSystemHolder.classを「resource/schemaorg_Apache_xmlbeans/system/s68C41DB812F52C975439BA10FE4FEE54」フォルダーからコピーしてください。
そして、TypeSystemHolder.classファイルをクラスパスフォルダー(build/classes/schemaorg_Apache_xmlbeans/system/s68C41DB812F52C975439BA10FE4FEE54)フォルダーに貼り付けます。
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>
含めるjarを抽出しますschemaorg_Apache_xmlbeans
フォルダ。コピーschemaorg_Apache_xmlbeans
抽出されたフォルダー内のフォルダー(jar抽出の結果)。解凍したフォルダでコマンドプロンプトを開きます。
jarcfコマンドを使用してjarを再度作成します。例:jar cf test.jar *
、すべてのフォルダを含めます。
そのjarをデプロイします。