我下载了JAXB 2.3.0.1和JavaBeans 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。
答案 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),然后编辑命令行以匹配上述调用。