4

我下载了JAXB 2.3.0.1JavaBeans Activation Framework (JAF) 1.2.0(基于对这个问题的回答)。我将所有 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。

4

1 回答 1

3

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

因此,使其工作的正确方法是使用以下命令:

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 中提取),并编辑命令行以匹配上述调用。

于 2018-10-03T17:46:28.093 回答