如何在Java9+;

如何在Java9+;,java,jaxb,xjc,java-11,Java,Jaxb,Xjc,Java 11,我下载并(基于对的回答)。我将所有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

我下载并(基于对的回答)。我将所有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--添加模块java.activation
,但失败并显示以下错误消息:

启动层初始化期间出错
java.lang.modules.ResolutionException:模块jaxb.core和jaxb.impl将包com.sun.xml.bind.marshaller导出到模块java.activation

如果我尝试组合使用
-cp
-addmodules
,则会出现不同的启动层初始化错误。有人知道如何让XJC使用Java9+平台运行吗


我的特定用例是Windows上的OpenJDK 11。

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

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