3

从 jdk 1.6 开始,包含 jaxb-xjc 相关的 jars 并在使用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 版本的 jaxb。jdk 1.6 中使用的版本是2.1.10。因此,我将 jaxb 2.2相关的 jars 放在了认可的 dirs 目录中。尽管如此,执行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,因此它们没有预加载,因此没有链接错误冲突。我的问题是如何让 jdk 1.6 使用我提供的 jaxb jar(通过java.endorsed.dirs或其他方式),而不是预打包的,以便我可以正确使用插件?

4

0 回答 0