我使用gradle jaxb插件从XSD生成类:https://github.com/jacobono/gradle-jaxb-plugin
它可以很好地与外部绑定配合使用,我可以使用内置的XJC扩展没有问题。但我没有管理jaxb扩展插件工作,特别是-Xinheritancejaxb2基础知识。
当我尝试gradle jaxb插件中提出的配置时文档,我得到以下错误:
:pwa-application:xjc FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':pwa-application:xjc'.
> java.util.ServiceConfigurationError: com.sun.tools.xjc.Plugin: Provider org.jvnet.jaxb2_commons.plugin.jaxbindex.JaxbIndexPlugin not a subtype
我在这个帖子中找到了解释:com.sun.tools.xjc.Plugin:提供者<插件>不是子类型但是那里没有解决gradlejaxb插件的方案,我陷入了困境。
好吧,我现在可以自己回答我的问题了。
解决方案是简单地使用
taskClassname = "org.jvnet.jaxb2_commons.xjc.XJC2Task"
文件中提到了这一点,但没有任何解释。现在我知道它的用途了。
我遇到了同样的错误
Project使用Java 11,但JAVA_HOME
指向Java 8。
在JAVA_HOME
环境中更改路径后。变量转换为Java 11,该问题已修复。
仅供参考-我们正在使用Gradle,针对Java 11的XJC定义如下:
project.ant {
taskdef name: "xjc",
classname: "com.sun.tools.xjc.XJCTask",
classpath: configurations.jaxb.asPath
mkdir(dir: sourcesDir)
mkdir(dir: classesDir)
xjc(destdir: sourcesDir) {
schema(dir: "src/main/resources/xsd", includes: "*.xsd", excludes: "XSD_FILENAME.xsd")
arg(value: "-wsdl")
arg(value: "-extension")
arg(value: "-Xinheritance")
arg(value: "-Xannotate")
produces(dir: sourcesDir, includes: "**/*.java")
binding(dir: "src/main/resources/xsd", includes: "bindings.xjb")
}
}