2011-11-16 94 views
13

我想將我的Maven2構建文件切換爲gradle。 使用gradle從WSDL + XSD生成java類似乎沒有進一步說明,因爲沒有gradle插件。 我使用maven的以下配置並搜索相當於gradle。如何使用gradle生成來自WSDL和XSD的類,相當於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> 

回答

23

我解決它......

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

如果有人還在跟蹤這個,有沒有人試過JAXB擴展添加到這個?當我這樣做時,出現像「Provider xx not a subtype」這樣的錯誤,其中「xx」是擴展的主要插件類。 –

13

如果你不能找到一個搖籃插件特別需要(而不想編寫自己的插件),尋找出一個Ant任務。這裏是JAXB的一個:XJC Ant Task

任何Ant任務都可以原樣使用Gradle(請參閱Using Ant from Gradle)。未來,Gradle還將支持Maven插件的執行。