2011-11-16 58 views
13

Quiero cambiar mi archivo de compilación Maven2 a gradle. Generar las clases java de WSDL + XSDs con gradle parece no estar documentado más, no hay un complemento de gradle para esto. Utilizo la siguiente configuración con maven y busco el equivalente para gradle.Cómo generar clases de WSDL y XSD con gradle, equivalente a maven-jaxb2-plugin

<!-- plugin for generating the classes from the WSDL+XSD --> 
<plugin> 
    <groupId>org.jvnet.jaxb2.maven2</groupId> 
    <artifactId>maven-jaxb2-plugin</artifactId> 
    <version>0.7.3</version> 
    <executions> 
    <execution> 
     <id>app1-stub-generation</id> 
     <goals> 
     <goal>generate</goal> 
     </goals> 
     <configuration> 
     <schemaDirectory>${project.build.directory}/wsdl/app1</schemaDirectory> 
     <schemaIncludes> 
      <include>*.xsd</include> 
     </schemaIncludes> 
     <generatePackage>org.app1.ws.generated</generatePackage> 
     <generateDirectory>${project.build.directory}/generated-sources/app1</generateDirectory> 
     <strict>true</strict> 
     </configuration> 
    </execution> 
    <execution> 
     <id>app2-v1-stub-generation</id> 
     <goals> 
     <goal>generate</goal> 
     </goals> 
     <configuration> 
     <schemaDirectory>src/main/resources/wsdl</schemaDirectory> 
     <schemaIncludes> 
      <include>v1/*.xsd</include> 
     </schemaIncludes> 
     <generatePackage>org.app2.ws.generated.v1</generatePackage> 
     <generateDirectory>${project.build.directory}/generated-sources/v1</generateDirectory> 
     <strict>true</strict> 
     </configuration> 
    </execution> 
    <execution> 
     <id>app2-v2-stub-generation</id> 
     <goals> 
     <goal>generate</goal> 
     </goals> 
     <configuration> 
     <schemaDirectory>src/main/resources/wsdl</schemaDirectory> 
     <schemaIncludes> 
      <include>v2/*.xsd</include> 
     </schemaIncludes> 
     <generatePackage>org.app2.ws.generated.v2</generatePackage> 
     <generateDirectory>${project.build.directory}/generated-sources/v2</generateDirectory> 
     <strict>true</strict> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

Respuesta

23

lo resolví ...

configurations { 
    jaxb 
} 

dependencies { 
    jaxb group: 'com.sun.xml.bind', name: 'jaxb-xjc', version: '2.2.4-1' 
} 

task jaxb() { 
    // output directory 
    jaxbTargetDir = file("${buildDir}/generated-sources") 
    jaxbTargetDirV19 = file(jaxbTargetDir.path + '/v19') 
    jaxbTargetDirV110 = file(jaxbTargetDir.path + '/v110') 
    jaxbTargetDirOtherWs = file(jaxbTargetDir.path + '/otherWs') 

    // perform actions 
    doLast { 
     jaxbTargetDirV19.mkdirs() 
     jaxbTargetDirV110.mkdirs() 
     jaxbTargetDirOtherWs.mkdirs() 

     ant.taskdef(name: 'xjc', classname: 'com.sun.tools.xjc.XJCTask', classpath: configurations.jaxb.asPath) 
     ant.jaxbTargetDirV19 = jaxbTargetDirV19 
     ant.jaxbTargetDirV110 = jaxbTargetDirV110 
     ant.jaxbTargetDirOtherWs = jaxbTargetDirOtherWs 

     // My-Webservice v1.10 
     ant.xjc(
       destdir: '${jaxbTargetDirV110}', 
       package: 'mypackage.ws.generated.v110', 
       schema: 'src/main/resources/wsdl/v1.10/MyServiceSchema.xsd' 
     ) 

     // My-Webservice v1.9 
     ant.xjc(
       destdir: '${jaxbTargetDirV19}', 
       package: 'mypackage.ws.generated.v19', 
       schema: 'src/main/resources/wsdl/v1.9/MyServiceSchema.xsd' 
     ) 

     // OtherWs-Webservice 
     ant.xjc(
       destdir: '${jaxbTargetDirOtherWs}', 
       package: 'mypackage.otherws.generated', 
       schema: 'src/main/resources/wsdl/OtherWsServiceSchema.xsd' 
     ) 
    } 
} 
compileJava.dependsOn jaxb 
+0

Si alguien sigue realizando un seguimiento de esto, ¿alguien ha intentado añadir extensiones JAXB a esto? Cuando hago esto, aparece un error como "Proveedor xx no un subtipo", donde "xx" es la clase de complemento principal para la extensión. –

13

Si no puede encontrar un plugin Gradle para una necesidad particular (y no desea escribir su propio plug-in), mirar hacia fuera para una tarea de hormiga. Aquí hay uno para JAXB: XJC Ant Task.

Cualquier tarea Ant se puede utilizar como está de Gradle (consulte Using Ant from Gradle). En el futuro, Gradle también admitirá la ejecución de complementos de Maven.

Cuestiones relacionadas