【问题标题】:How to Run XJC in Java 9+如何在 Java 9+ 中运行 XJC
【发布时间】:2019-03-08 04:04:25
【问题描述】:

我下载了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。

【问题讨论】:

  • 尝试downloading the version,他们已经要求人们迁移到 - a:javax.activation g:com.sun.activation,并确保引用正确的 jar 名称。由于日志中的DataSource 类似乎是工件中的right there
  • 你不能同时指定 -cp 和 -jar,我假设你的意思是把 jaxb-xjc.jar 放在类路径上并指定它的主类。
  • @nullpointer 我下载了您链接的版本,但它的二进制文件与我已经使用的版本相同(通过加密哈希验证)。
  • 升级到jaxb-api 2.3.1版,那么你就不必再显式包含JAF了。

标签: java jaxb xjc java-11


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-15
    • 2013-06-23
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多