如何在 Java 9+ 中 运行 XJC

How to Run XJC in Java 9+

我下载了 JAXB 2.3.0.1 and JavaBeans Activation Framework (JAF) 1.2.0 (based on the answer to )。我将所有 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

我已验证 class 存在于 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。

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