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