修改java 类 for wsdl 和 xsd in gradle application 的包名
Modify package names of generated java classes for wsdl and xsd in gradle application
我正在使用 Gradle kotlin dsl
开发应用程序,即 build.gradle 使用 Kotlin。我有一个导入多个 XSD 的 WSDL 文件。编译时,Java 类 在默认位置生成(在 XSD 中提到)。我的要求是每个 XSD 的 Java 类 应该在 自定义位置 中生成。
我指的是另一个 Maven 项目。下面的插件就是用来实现我的要求的。
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>3.1.5</version>
<executions>
<execution>
<id>generate-sources-sample</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${project.build.directory}/generated-sources</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/wsdl_file_name.wsdl</wsdl>
<extraargs>
<extraarg>-client</extraarg>
<extraarg>-p</extraarg>
<extraarg>urn:namespace:of:xsd:one=com.first.xsd.from.wsdl</extraarg>
<extraarg>-p</extraarg>
<extraarg>urn:namespace:of:xsd:one=com.second.xsd.from.wsdl</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
我试过使用 wsdl2Java 任务来分配自定义位置。我无法使用该任务,因为它需要 CXF。它可能会导致我的应用程序发生 jar 冲突。
extra["cxfVersion"] = "3.1.5"
project.wsdl2javaExt {
cxfVersion = "${property("cxfVersion")}"
}
tasks.getByName<no.nils.wsdl2java.Wsdl2JavaTask>("wsdl2java") {
wsdlDir = file("$projectDir/src/main/resources/xsd/trip") // wslds location
generatedWsdlDir = file("$projectDir/src/main/generated-sources/xjc/newpackage") // store generates java classes to
wsdlsToGenerate = arrayListOf(
arrayListOf("$wsdlDir/wsdl_file_name.wsdl"),
arrayListOf("-xjc", "-autoNameResolution",
"$wsdlDir/wsdl_file_name.wsdl")
)
}
请指导我在 Gradle 中获得相同的行为。
我已通过在我的应用程序的 binding.xjb 文件中添加自定义位置来解决此问题。以下更改对我有用。
<jaxb:bindings xmlns:tns="urn:namespace:of:xsd:one" scd="x-schema::tns">
<jaxb:schemaBindings>
<jaxb:package name="com.first.xsd.from.wsdl"/>
</jaxb:schemaBindings>
</jaxb:bindings>
<jaxb:bindings xmlns:tns="urn:namespace:of:xsd:two" scd="x-schema::tns">
<jaxb:schemaBindings>
<jaxb:package name="com.second.xsd.from.wsdl"/>
</jaxb:schemaBindings>
</jaxb:bindings>
我正在使用 Gradle kotlin dsl
开发应用程序,即 build.gradle 使用 Kotlin。我有一个导入多个 XSD 的 WSDL 文件。编译时,Java 类 在默认位置生成(在 XSD 中提到)。我的要求是每个 XSD 的 Java 类 应该在 自定义位置 中生成。
我指的是另一个 Maven 项目。下面的插件就是用来实现我的要求的。
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>3.1.5</version>
<executions>
<execution>
<id>generate-sources-sample</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${project.build.directory}/generated-sources</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/wsdl_file_name.wsdl</wsdl>
<extraargs>
<extraarg>-client</extraarg>
<extraarg>-p</extraarg>
<extraarg>urn:namespace:of:xsd:one=com.first.xsd.from.wsdl</extraarg>
<extraarg>-p</extraarg>
<extraarg>urn:namespace:of:xsd:one=com.second.xsd.from.wsdl</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
我试过使用 wsdl2Java 任务来分配自定义位置。我无法使用该任务,因为它需要 CXF。它可能会导致我的应用程序发生 jar 冲突。
extra["cxfVersion"] = "3.1.5"
project.wsdl2javaExt {
cxfVersion = "${property("cxfVersion")}"
}
tasks.getByName<no.nils.wsdl2java.Wsdl2JavaTask>("wsdl2java") {
wsdlDir = file("$projectDir/src/main/resources/xsd/trip") // wslds location
generatedWsdlDir = file("$projectDir/src/main/generated-sources/xjc/newpackage") // store generates java classes to
wsdlsToGenerate = arrayListOf(
arrayListOf("$wsdlDir/wsdl_file_name.wsdl"),
arrayListOf("-xjc", "-autoNameResolution",
"$wsdlDir/wsdl_file_name.wsdl")
)
}
请指导我在 Gradle 中获得相同的行为。
我已通过在我的应用程序的 binding.xjb 文件中添加自定义位置来解决此问题。以下更改对我有用。
<jaxb:bindings xmlns:tns="urn:namespace:of:xsd:one" scd="x-schema::tns">
<jaxb:schemaBindings>
<jaxb:package name="com.first.xsd.from.wsdl"/>
</jaxb:schemaBindings>
</jaxb:bindings>
<jaxb:bindings xmlns:tns="urn:namespace:of:xsd:two" scd="x-schema::tns">
<jaxb:schemaBindings>
<jaxb:package name="com.second.xsd.from.wsdl"/>
</jaxb:schemaBindings>
</jaxb:bindings>