如何在Java 9+中运行XJC

时间:2018-10-03 01:05:18

标签: java jaxb xjc java-11

我下载了JAXB 2.3.0.1JavaBeans Activation Framework (JAF) 1.2.0(基于对this question的回答)。我将所有JAR文件提取到同一目录,然后在该目录中运行以下命令:

java -cp jaxb-api.jar;jaxb-core.jar;jaxb-impl.jar;javax.activation-1.2.0.jar
    -jar jaxb-xjc.jar [xjc-arguments]

以上命令失败,并显示以下消息:

  

java.lang.NoClassDefFoundError:javax / activation / DataSource
  ...
  引起原因:java.lang.ClassNotFoundException:javax.activation.DataSource

我已验证javax.activation-1.2.0.jar文件中是否存在类。我也尝试使用新的(对于Java 9+)自变量-p . --add-modules java.activation,但是失败并显示以下错误消息:

  

启动层初始化期间发生错误
  java.lang.modules.ResolutionException:模块jaxb.core和jaxb.impl将包com.sun.xml.bind.marshaller导出到模块java.activation

如果我尝试使用-cp--add-modules的组合,则会收到另一个启动层初始化错误。有谁知道如何使XJC在Java 9+平台上运行?

我的特定用例是Windows上的OpenJDK 11。

1 个答案:

答案 0 :(得分:2)

主要问题是 java 可执行文件不支持同时指定-cp-jar命令行参数。感谢Alan Bateman提供的信息!

因此,正确执行此操作的方法是使用以下命令:

java -cp javax.activation-1.2.0.jar;jaxb-xjc.jar com.sun.tools.xjc.XJCFacade
    [xjc-arguments]

为了简化XJC的运行,打开 bin / xjc.bat (摘自jaxb-ri-2.3.0.zip),然后编辑命令行以匹配上述调用。