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