如何在Gradle中从XSD生成无命名空间的JAXB类
问题:Gradle JAXB生成带命名空间的类,如何改为无命名空间?
我正在将大型项目构建从Maven迁移至Gradle,其中包含使用JAXB从XSD生成类的步骤。Maven构建生成的类无命名空间(符合需求,因需用于两个不同命名空间),但Gradle构建生成的类的@XMLRootElement注解带有命名空间,导致无法正常工作。我使用com.intershop.gradle.jaxb插件,配置看似与Maven的maven-jaxb2-plugin一致,请问如何修改Gradle构建步骤以生成无命名空间的类?
Maven原配置
<plugin> <groupId>org.jvnet.jaxb2.maven2</groupId> <artifactId>maven-jaxb2-plugin</artifactId> <version>0.14.0</version> <configuration> <schemaDirectory>${project.build.directory}/classes/xmlbuild</schemaDirectory> <bindingDirectory>${project.build.directory}/classes/xmlbuild</bindingDirectory> <strict>false</strict> <schemaIncludes> <include>**/*.xsd</include> </schemaIncludes> <bindingIncludes> <include>**/*.xjb</include> </bindingIncludes> <args> <arg>-Xannotate</arg> <arg>-Xvalue-constructor</arg> <arg>-XtoString</arg> <arg>-Xequals</arg> <arg>-XhashCode</arg> <arg>-Xcopyable</arg> <arg>-Xmergeable</arg> <arg>-Xdefault-value</arg> <arg>-Xfluent-api</arg> </args> <extension>true</extension> </configuration> </plugin>
Gradle原配置
jaxb { javaGen { apiModelClasses { schemas = fileTree("$buildDir/path/to/xsds") { include '*.xsd' } bindings = fileTree("$buildDir/path/to/xsds") { include '*.xjb' } extension = true antTaskClassName = 'org.jvnet.jaxb2_commons.xjc.XJC2Task' args = [ '-npa', '-Xannotate', '-Xvalue-constructor', '-XtoString', '-Xequals', '-XhashCode', '-Xcopyable', '-Xmergeable', '-Xdefault-value', '-Xfluent-api', '-verbose' ] } } }
解决步骤
- 移除
-npa参数:该参数会禁止生成package-info.java,导致XJC将命名空间直接写入@XMLRootElement注解中。Maven配置中无此参数,因此生成的类注解不带命名空间。 - 添加
strict = false配置:对应Maven中的<strict>false</strict>,开启宽松模式处理XSD,避免命名空间相关的严格校验问题。
修改后的Gradle配置
jaxb { javaGen { apiModelClasses { schemas = fileTree("$buildDir/path/to/xsds") { include '*.xsd' } bindings = fileTree("$buildDir/path/to/xsds") { include '*.xjb' } extension = true strict = false // 新增:对应Maven的strict配置 antTaskClassName = 'org.jvnet.jaxb2_commons.xjc.XJC2Task' args = [ // 移除了-npa参数 '-Xannotate', '-Xvalue-constructor', '-XtoString', '-Xequals', '-XhashCode', '-Xcopyable', '-Xmergeable', '-Xdefault-value', '-Xfluent-api', '-verbose' ] } } }
内容的提问来源于stack exchange,提问作者Hedley
相关产品推荐
相关产品推荐

