2011-11-16 15 views
13

Voglio passare il mio file di build Maven2 a gradle. La generazione delle classi java da WSDL + XSD con gradle sembra non essere documentata ulteriormente, per questo non esiste un plugin gradle. Io uso la seguente configurazione con Maven e cerco l'equivalente per gradle.Come generare classi da WSDL e 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> 

risposta

23

ho risolto ...

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

Se qualcuno continua a monitorare questo, qualcuno ha cercato di aggiungere estensioni JAXB a questo? Quando faccio questo, ottengo un errore come "Provider xx non un sottotipo", dove "xx" è la classe di plugin principale per l'estensione. –

13

Se non riesci a trovare un plugin Gradle per una particolare necessità (e non si vuole scrivere il proprio plugin), guardare fuori per un compito Ant. Ecco uno per JAXB: XJC Ant Task.

Qualsiasi attività Ant può essere utilizzata così com'è da Gradle (vedere Using Ant from Gradle). In futuro, Gradle supporterà anche l'esecuzione di plugin Maven.

Problemi correlati