java - 如何在 Java 9+ 中运行 XJC

标签 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
    ...
Caused by: java.lang.ClassNotFoundException: javax.activation.DataSource



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

Error occurred during initialization of boot layer
java.lang.modules.ResolutionException: Modules jaxb.core and jaxb.impl export package com.sun.xml.bind.marshaller to module java.activation



如果我尝试组合 -cp--add-modules , 我得到一个不同的引导层初始化错误。有谁知道如何让 XJC 使用 Java 9+ 平台运行?

我的具体用例是 Windows 上的 OpenJDK 11。

最佳答案

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

关于java - 如何在 Java 9+ 中运行 XJC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52618325/

相关文章:

java - 如果不缩放 box2d 每米像素会发生什么?

java - java类的大小会影响应用程序的性能吗

java - 排除SBT项目中生成的源码包目录

java - 通过 XJC 生成可序列化的类,无需更改 xsd

java - 从模式生成接口(interface)

java - 实现列表<E> : do I need a new class?

java - 计算复合 Material 的最小尺寸

jaxb - 如何在 enunciate 中记录类型?

jaxb - 解码单个元素列表失败

java - JAXB 中多次出现部分返回空列表