如何使用 gradle 从 WSDL 和 XSD 生成类,相当于 maven-jaxb2-plugin
Posted
技术标签:
【中文标题】如何使用 gradle 从 WSDL 和 XSD 生成类,相当于 maven-jaxb2-plugin【英文标题】:Howto generate classes from WSDL and XSD with gradle, equivalent to maven-jaxb2-plugin 【发布时间】:2011-12-30 19:15:18 【问题描述】:我想将我的 Maven2 构建文件切换到 gradle。 似乎没有进一步记录使用 gradle 从 WSDL + XSD 生成 java 类,没有为此的 gradle 插件。 我将以下配置与 maven 一起使用并搜索 gradle 的等效项。
<!-- 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>
【问题讨论】:
【参考方案1】:使用此处描述的插件:https://github.com/nilsmagnus/wsdl2java
注意:自 2020 年起,此建议不再适用,因为推荐的插件已停止使用,并且不再适用于较新版本的 Gradle。
【讨论】:
【参考方案2】:我解决了...
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
【讨论】:
如果有人还在跟踪这个,有没有人尝试向这个添加 JAXB 扩展?执行此操作时,我收到类似“Provider xx not a subtype”的错误,其中“xx”是扩展的主要插件类。【参考方案3】:如果您找不到满足特定需求的 Gradle 插件(并且不想编写自己的插件),请寻找 Ant 任务。这是 JAXB 的一个:XJC Ant Task。
任何 Ant 任务都可以从 Gradle 中按原样使用(请参阅Using Ant from Gradle)。未来,Gradle 还将支持 Maven 插件的执行。
【讨论】:
以上是关于如何使用 gradle 从 WSDL 和 XSD 生成类,相当于 maven-jaxb2-plugin的主要内容,如果未能解决你的问题,请参考以下文章