How to compile multiple xsd files in Gradle JAXB/XJC?

ant, gradle, jaxb, schema, xjc

Solution

I solved it myself. Here is the working solution.

//  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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
}

Problem

I'm fairly new to Gradle and I am facing some issues trying to compile multiple schema files using Gradle Ant XJC. Using the below code, I'm able to compile 1 schema successfully. However, I'm not sure how to do the same for multiple schema files. Any advice please? ``` // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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 } ```

Original source