如何使用 Java 11 和 gradle 从 XSD 生成 java 类?

Dan*_*Dan 5 java xsd jaxb gradle

Java 11 取消了对 JAXB 和 xjc 等从 XSD 模式生成 java 文件的工具的支持。我在 Gradle 中找不到很多 xjc 生成的示例,并尝试了一些选项,但到目前为止没有运气。另外,应该在 Spring Boot Gradle 项目中添加哪些依赖项才能为 JAXB 提供全面支持?

小智 5

添加正确的依赖项是成功的关键。

...

    项目.ext {
        jaxbTargetDir = 文件(“src/生成/java”)
    }
    
    配置{
        xsd2java
    }
    
    依赖项{
        xsd2java“com.sun.xml.bind:jaxb-xjc:3.0.2”
        xsd2java“com.sun.xml.bind:jaxb-impl:3.0.2”
        xsd2java“com.sun.xml.bind:jaxb-core:3.0.2”
        xsd2java“com.sun.activation:jakarta.activation:2.0.1”
        xsd2java“jakarta.xml.bind:jakarta.xml.bind-api:3.0.1”
    }
    
    任务 xsd2java() {
    
        做最后{
            jaxbTargetDir.mkdirs()
    
            ant.taskdef(名称:'xjc',类名:'com.sun.tools.xjc.XJCTask',类路径:configurations.xsd2java.asPath)
            ant.jaxbTargetDir = jaxbTargetDir
    
            ant.xjc(
                    目标目录: '${jaxbTargetDir}',
                    包:'dk.myproject.domain.service.request',
                    架构:'src/build-resources/project.xsd'
            )
    
            ant.xjc(
                    目标目录: '${jaxbTargetDir}',
                    包:'dk.myproject.domain.service.response',
                    架构:'src/build-resources/myproject.xsd'
            )
    
        }
    }
    
    编译Java.dependsOn xsd2java

...