如何在Java 9+中运行XJC

5

我根据这个问题的答案,下载了JAXB 2.3.0.1JavaBeans Activation Framework (JAF) 1.2.0。我将所有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的组合,则会出现不同的引导层初始化错误。有人知道如何在Java 9+平台上运行XJC吗?
我的具体用例是Windows上的OpenJDK 11。

1
尝试下载版本,他们要求人们迁移到a:javax.activation g:com.sun.activation,并确保引用正确的jar名称。由于日志中的DataSource类似乎就在这个构件中https://github.com/eclipse-ee4j/jaf/blob/master/activation/src/main/java/javax/activation/DataSource.java。 - Naman
3
不能同时指定-cp和-jar参数,我猜你的意思是将jaxb-xjc.jar放在类路径中,并指定它的主类。 - Alan Bateman
@nullpointer 我下载了你提供的版本,但它与我已经使用的版本是二进制相同的(通过加密哈希验证)。 - Jeff G
2
升级到 jaxb-api 版本 2.3.1,那么您就不需要再显式地包含 JAF 了。 - Jesper
1个回答

4
主要问题是Java可执行文件不支持同时指定-cp-jar命令行参数。感谢Alan Bateman提供的信息!
因此,使其正常工作的正确方法是使用以下命令:
java -cp javax.activation-1.2.0.jar;jaxb-xjc.jar com.sun.tools.xjc.XJCFacade
    [xjc-arguments]

为了简化运行XJC,打开从jaxb-ri-2.3.0.zip中提取的bin/xjc.bat文件,并编辑命令行以匹配上述调用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接