如何将jaxb插件扩展与gradle jaxb插件一起使用



我使用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")
    }
}

最新更新