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

How to generate java classes from XSD using Java 11 and gradle?

Java 11 删除了对 JAXB 和 xjc 等工具的支持,这些工具从 XSD 模式生成 java 文件。我在 Gradle 中找不到很多关于 xjc 生成的示例,并尝试了一些选项,但到目前为止没有成功。 此外,应该在 spring 启动 Gradle 项目中添加哪些依赖项以提供对 JAXB 的全面支持?

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

...

    project.ext {
        jaxbTargetDir = file("src/generated/java")
    }
    
    configurations {
        xsd2java
    }
    
    dependencies {
        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"
    }
    
    task xsd2java() {
    
        doLast {
            jaxbTargetDir.mkdirs()
    
            ant.taskdef(name: 'xjc', classname: 'com.sun.tools.xjc.XJCTask', classpath: configurations.xsd2java.asPath)
            ant.jaxbTargetDir = jaxbTargetDir
    
            ant.xjc(
                    destdir: '${jaxbTargetDir}',
                    package: 'dk.myproject.domain.service.request',
                    schema: 'src/build-resources/project.xsd'
            )
    
            ant.xjc(
                    destdir: '${jaxbTargetDir}',
                    package: 'dk.myproject.domain.service.response',
                    schema: 'src/build-resources/myproject.xsd'
            )
    
        }
    }
    
    compileJava.dependsOn xsd2java

...