如何配置最新org.apache.cxf插件生成含javax而非jakarta导入的Java类?
配置Apache CXF XJC插件生成带javax导入的Java类(最新版本)
Apache CXF 4.x版本默认采用Jakarta EE命名空间(jakarta.xml.bind等),但无需降级到旧版本,通过以下配置即可生成带有javax导入语句的Java类,同时避免旧版本的JavaDoc转义缺陷:
修改插件配置
在原有插件配置基础上,添加javax版本的JAXB依赖,并指定XJC参数强制使用javax命名空间:
<plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-xjc-plugin</artifactId> <version>4.0.0</version> <!-- 引入javax版本的JAXB依赖,覆盖默认的Jakarta依赖 --> <dependencies> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.3.1</version> </dependency> </dependencies> <configuration> <extensions> <extension>org.apache.cxf.xjcplugins:cxf-xjc-dv:4.0.0</extension> </extensions> <!-- 配置XJC全局参数,启用扩展并确保生成代码使用javax --> <xjcArgs> <xjcArg>-extension</xjcArg> <xjcArg>-no-header</xjcArg> </xjcArgs> </configuration> <executions> <execution> <id>generate-sources</id> <phase>generate-sources</phase> <goals> <goal>xsdtojava</goal> </goals> <configuration> <sourceRoot>${basedir}/src/gen/java</sourceRoot> <xsdOptions> <xsdOption> <xsd>${basedir}/src/main/resources/xslt/MySchema.xsd</xsd> <packagename>some.package</packagename> </xsdOption> </xsdOptions> </configuration> </execution> </executions> </plugin>
关键配置说明
- javax依赖引入:通过
dependencies块指定jaxb-api和jaxb-impl的javax版本,让代码生成时优先使用javax命名空间的类。 - XJC参数配置:
-extension参数启用XJC扩展(确保cxf-xjc-dv插件正常工作),-no-header可选,用于移除生成代码的版权注释。
这样配置后,生成的Java类会自动使用javax.xml.bind.*等导入语句,同时保留最新版本插件的JavaDoc生成能力,避免旧版本的转义缺陷。
内容的提问来源于stack exchange,提问作者makozaki
相关产品推荐
相关产品推荐

