3

jdk 1.6 以降、jaxb-xjc 関連の jar が含まれており、javaコマンドの使用時に JVM によって自動的にロードされます。現在、xjc デフォルト値プラグインを次の方法で使用しようとしています。

java -Djava.endorsed.dirs=C:\workspace\javalibs\xjc -classpath C:\apache-ant-1.8.3\lib\ant.jar;c:\workspace\javalibs\xjc\cxf-xjc-dv-2.6.1.jar com.sun.tools.xjc.XJCFacade -d test -extension -Xdv -verbose test.xsd

このjava.endorsed.dirsプロパティーは、jaxb の jdk バージョンを新しい完全バージョンでオーバーライドできるようにするものです。jdk 1.6 で使用されるバージョンは2.1.10です。したがって、jaxb 2.2関連の jar ファイルを承認済みのディレクトリ ディレクトリに配置しました。それにもかかわらず、 Javaコマンドを実行すると次のエラーが発生します。

Exception in thread "main" java.lang.LinkageError: loader constraint violation:
loader (instance of <bootloader>) previously initiated loading for a different type with name "com/sun/tools/xjc/outline/Outline"
    at org.apache.cxf.xjc.dv.DefaultValuePlugin.run(DefaultValuePlugin.java:105)
    at com.sun.tools.xjc.addon.apache_cxf.dv.DefaultValuePlugin.run(DefaultValuePlugin.java:59)
    at com.sun.tools.xjc.model.Model.generateCode(Model.java:290)
    at com.sun.tools.xjc.Driver.run(Driver.java:343)
    at com.sun.tools.xjc.Driver.run(Driver.java:191)
    at com.sun.tools.xjc.Driver._main(Driver.java:116)
    at com.sun.tools.xjc.Driver.access$000(Driver.java:74)
    at com.sun.tools.xjc.Driver$1.run(Driver.java:96)

次に jdk 1.5 でプラグインをテストしたところ、問題なく xjc によってクラスが正しく生成されました。この理由は、jd​​k 1.5 には jaxb-xjc 関連の jar が含まれていないため、事前にロードされていなかったため、Linkage エラーの衝突はありませんでした。私の質問はjava.endorsed.dirs、プラグインを正しく使用できるように、事前にパッケージ化されたものではなく、提供するjaxb jarを(または他の方法で)使用するjdk 1.6を取得するにはどうすればよいですか?

4

0 に答える 0