2011-11-16 38 views
13

Tôi muốn chuyển tệp xây dựng Maven2 của mình thành gradle. Việc tạo các lớp java từ WSDL + XSDs với gradle dường như không được ghi thêm nữa mà không có plugin gradle cho việc này. Tôi sử dụng cấu hình sau với maven và tìm kiếm tương đương với gradle.Cách tạo các lớp từ WSDL và XSD bằng gradle, tương đương với 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> 

Trả lời

23

tôi giải quyết nó ...

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

Nếu ai vẫn theo dõi này, có ai cố gắng thêm phần mở rộng JAXB có trách nhiệm này? Khi tôi làm điều này, tôi gặp lỗi như "Nhà cung cấp xx không phải là loại phụ", trong đó "xx" là lớp plugin chính cho tiện ích. –

13

Nếu bạn không thể tìm thấy plugin Gradle cho một nhu cầu cụ thể (và không muốn viết plugin của riêng bạn), hãy tìm kiếm tác vụ Ant. Đây là một cho JAXB: XJC Ant Task.

Mọi tác vụ Ant đều có thể được sử dụng như là từ Gradle (xem Using Ant from Gradle). Trong tương lai, Gradle cũng sẽ hỗ trợ thực hiện các plugin Maven.

Các vấn đề liên quan