ant - 如何在 Gradle JAXB/XJC 中编译多个 xsd 文件?

标签 ant jaxb gradle schema xjc

我对 Gradle 还很陌生,我在尝试使用 Gradle Ant XJC 编译多个模式文件时遇到了一些问题。

使用下面的代码,我能够成功编译 1 个模式。但是,我不确定如何对多个架构文件执行相同的操作。

请问有什么建议吗?

//  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Task : XJC ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
final def packageName = "org.test.webservice.domain"
final def schemaFile = "misc/resources/schemas/employee-v3/wadl/employee.xsd"

configurations { provided }
project.ext.generatedSrcDir = file("$buildDir/generated-src")
dependencies {
    provided 'com.sun.xml.bind:jaxb-impl:2.2.6'
    provided 'com.sun.xml.bind:jaxb-xjc:2.2.6'
}
task jaxb {
    println 'Starting JAXB XJC...'
    ext {
        packagePath = packageName.replaceAll("\\.", "/")
        srcFile = file(schemaFile)
        destDir = new File(project.ext.generatedSrcDir, packagePath)
    }

    inputs.file srcFile
    outputs.dir destDir
    project.ext.generatedSrcDir.mkdirs()
    ant.taskdef(name: 'xjc',
            classname: 'com.sun.tools.xjc.XJCTask',
            classpath: configurations.provided.asPath)

    doLast {
        project.ext.generatedSrcDir.mkdirs()
        ant.xjc(schema: srcFile, package: packageName,
                destdir: project.ext.generatedSrcDir)
    }

    task generateSources() {}
    sourceSets.main.java.srcDirs += project.ext.generatedSrcDir
    generateSources.dependsOn jaxb
    compileJava.dependsOn generateSources
    eclipseClasspath.dependsOn generateSources
//    ideaClasspath.dependsOn generateSources
}

最佳答案

我自己解决了。这是工作解决方案。

//  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Task : XJC ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
final def packageName = "org.test.webservice.domain"
final def schemaDir = "misc/resources/schemas/employee-sda-v3/wadl"

configurations { provided }
project.ext.generatedSrcDir = file("$buildDir/generated-src")
dependencies {
    provided 'com.sun.xml.bind:jaxb-impl:2.2.6'
    provided 'com.sun.xml.bind:jaxb-xjc:2.2.6'
}
task jaxb {
    println 'Starting JAXB XJC...'
    ext {
        packagePath = packageName.replaceAll("\\.", "/")
        destDir = new File(project.ext.generatedSrcDir, packagePath)
    }

    outputs.dir destDir
    project.ext.generatedSrcDir.mkdirs()
    ant.taskdef(name: 'xjc', classname: 'com.sun.tools.xjc.XJCTask', classpath: configurations.provided.asPath)

    doLast {
        project.ext.generatedSrcDir.mkdirs()
        ant.xjc(package: packageName, destdir: project.ext.generatedSrcDir){
            schema(dir: ${schemaDir}, includes: "**/*.xsd")
        }
    }

    task generateSources() {}
    sourceSets.main.java.srcDirs += project.ext.generatedSrcDir
    generateSources.dependsOn jaxb
    compileJava.dependsOn generateSources
    eclipseClasspath.dependsOn generateSources
//    ideaClasspath.dependsOn generateSources
}

关于ant - 如何在 Gradle JAXB/XJC 中编译多个 xsd 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23619178/

相关文章:

java - jaxb xjc 编译错误 Super Interface not found In jaxb generated class path

java - Gradle 无法解析 Android Studio 中的依赖项

android - 如何在 gradle.build 中编写 build.finalisedBy.uploadArchives

eclipse - 如何使用Ant进行清理和构建Eclipse

BlackBerry:在 Ant 脚本中从 JAR 源文件创建 COD

java - 如何生成JAXB生成的Java类的多个版本?

android - Android-Gradle:与应用程序具有不同targetSDK版本的库

java - 构建 openfire 源的问题

java - Battlecode 2015 ant 运行导致 Win32ShellFolder2 类中出现 nullPointerException

java - 为不同的 xml 子标签生成 xsd 和 Java 类 - JAXB