如何在 xjc 命令行上使用 JAXB 扩展

How to use JAXB extensions on xjc command line

我正在处理相关问题 here,但我有一个单独的问题。也许这都是同一个问题的一部分,但似乎有所不同。

由于我在通过 Ant 任务和外观 运行ning XJC 时遇到的问题,我现在正尝试 运行 使用命令行 "xjc" 来自 JDK.

的工具

和原来的问题一样,我尝试使用 "Element Wrapper" 和 "Fluent API" 扩展,所以我的命令行如下:

xjc -extension  -classpath "lib/jaxb-fluent-api-2.1.8.jar;lib/jaxb-xew-plugin-1.4.jar" -Xxew -summary target/xew-summary.txt -instantiate lazy -Xfluent-api schema/serviceCallResults.xsd

这些基本上是我发送给 "cxf-jaxb-plugin" Maven 插件的相同参数,该插件已经运行了很长时间。不幸的是,此 "xjc" 命令行失败并显示:

unrecognized parameter -Xxew

这里可能有什么问题?

抱歉,这是行不通的。

XJC 插件必须扩展 com.sun.tools.xjc.Plugin class。但是包含在 JDK 中并可作为 xjc 二进制文件使用的 XJC(例如 Windows 下的 xjc.exe 被重新打包com.sun.tools.xjc -> com.sun.tools.internal.xjc.

所以在 vanilla 命令行 xjc 你没有 com.sun.tools.xjc.Plugin class(XJC 插件扩展)但是 com.sun.tools.internal.xjc.Plugin.

所以 CLI xjc 不能与 XJC 插件一起使用。唯一仍然有效的插件是那些也被重新打包的插件。 (例如 com.sun.tools.internal.xjc.addon.code_injector.PluginImpl。)

如果您需要命令行,请尝试找出 java -cp ... 参数,这是使其与 XEW 或 JAXB2-Basics 等第三方 XJC 插件一起工作的唯一方法。