Java 如何使用gradle从WSDL和XSD生成类,相当于maven-jaxb2-plugin
我想将Maven2构建文件切换到gradle。 用gradle从WSDL+xsd生成java类似乎没有进一步的文档记录,没有gradle插件。 我对maven使用以下配置,并搜索gradle的等效配置Java 如何使用gradle从WSDL和XSD生成类,相当于maven-jaxb2-plugin,java,maven,wsdl,gradle,maven-jaxb2-plugin,Java,Maven,Wsdl,Gradle,Maven Jaxb2 Plugin,我想将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> <artif
<!-- 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>
org.jvnet.jaxb2.maven2
maven-jaxb2-plugin
0.7.3
app1存根生成
生成
${project.build.directory}/wsdl/app1
*.xsd
org.app1.ws.generated
${project.build.directory}/generated sources/app1
真的
app2-v1-存根生成
生成
src/main/resources/wsdl
v1/*.xsd
org.app2.ws.generated.v1
${project.build.directory}/generated sources/v1
真的
app2-v2-存根生成
生成
src/main/resources/wsdl
v2/*.xsd
org.app2.ws.generated.v2
${project.build.directory}/generated sources/v2
真的
如果您找不到满足特定需求的Gradle插件(并且不想编写自己的插件),请留意Ant任务。这里有一个用于JAXB:
任何Ant任务都可以按Gradle的原样使用(请参阅)。将来,Gradle还将支持Maven插件的执行。我解决了这个问题
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”是扩展的主要插件类。