从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
属性应该允许您使用更新的完整版本覆盖jdk的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正确生成的,没有故障。原因是jdk 1.5不包含jaxb-xjc相关的jar,所以它们没有预先加载,因此没有Linkage错误冲突。我的问题是如何让jdk 1.6使用我提供的jaxb jar(通过java.endorsed.dirs
或其他方式),而不是预先打包的jar,以便我可以正确使用插件?