apply plugin: 'java' import org.gradle.api.internal.artifacts.dependencies.DefaultExternalModuleDependency final String JAXB_CONFIGURATION_NAME = "jaxb" project.ext { jaxbVersion = '2.2.7' } ConfigurationContainer configurations = project.configurations configurations.create(JAXB_CONFIGURATION_NAME). setVisible(false). extendsFrom(configurations.getByName(JavaPlugin.COMPILE_CONFIGURATION_NAME)). setDescription("JAXB Compile") ExternalModuleDependency dependency dependency = new DefaultExternalModuleDependency("com.sun.xml.bind", "jaxb-xjc", project.ext.jaxbVersion) dependency.setTransitive(false) project.configurations.getByName(JAXB_CONFIGURATION_NAME).dependencies.add(dependency) dependency = new DefaultExternalModuleDependency("com.sun.xml.bind", "jaxb-core", project.ext.jaxbVersion) dependency.setTransitive(false) project.configurations.getByName(JAXB_CONFIGURATION_NAME).dependencies.add(dependency) class GenerateJaxb extends org.gradle.api.internal.ConventionTask { @Input String jaxbPackage @InputFile File schema @Input Boolean dtd @OutputDirectory File outputDir @org.gradle.api.tasks.TaskAction void generateJaxb() { println("Generating JAXB: ") println(" jaxbPackage: " + jaxbPackage) println(" schema: " + schema.absolutePath) println(" dtd: " + dtd) println(" outputDir: " + outputDir) outputDir.mkdirs() ant.taskdef(name: 'xjc', classname: 'com.sun.tools.xjc.XJC2Task', classpath: project.configurations.jaxb.asPath) ant.xjc(destdir: outputDir, package: jaxbPackage, schema: schema.absolutePath) { if (dtd) { arg(value: '-dtd') } } } } project.ext.generateJaxbType = GenerateJaxb.class