基于Maven插件为Jakarta 4.0.0从XSD/WSDL生成Java代码遇阻求助
适用于Jakarta EE 4的WSDL/XSD转Java POJO解决方案
以下是几个经过验证的可行方案,可直接生成带Jakarta注解的POJO,避免javax或com.sun相关依赖错误:
方案1:使用org.jvnet.jaxb2.maven2的Jakarta适配插件
该插件官方已推出适配Jakarta的版本,核心是通过-jakarta参数强制生成Jakarta注解,而非javax。
Maven配置示例:
<plugin> <groupId>org.jvnet.jaxb2.maven2</groupId> <artifactId>maven-jaxb2-plugin</artifactId> <version>0.15.3</version> <executions> <execution> <goals> <goal>generate</goal> </goals> </execution> </executions> <configuration> <args> <arg>-jakarta</arg> <!-- 如需自定义注解,可添加-Xannotate参数并配合绑定文件 --> <!-- <arg>-Xannotate</arg> --> </args> <schemaDirectory>${project.basedir}/src/main/resources/xsd</schemaDirectory> <generatePackage>com.your.project.model</generatePackage> </configuration> <dependencies> <dependency> <groupId>jakarta.xml.bind</groupId> <artifactId>jakarta.xml.bind-api</artifactId> <version>4.0.0</version> </dependency> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>4.0.3</version> <scope>runtime</scope> </dependency> <!-- 如需自定义注解,添加此依赖 --> <!-- <dependency> <groupId>org.jvnet.jaxb2_commons</groupId> <artifactId>jaxb2-basics-annotate</artifactId> <version>1.1.0</version> </dependency> --> </dependencies> </plugin>
方案2:使用Apache CXF 4.x的cxf-codegen-plugin
CXF 4.x完全基于Jakarta EE规范,无需额外兼容处理,通过-jakarta参数即可生成符合要求的代码,支持WSDL和XSD。
Maven配置示例:
<plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin</artifactId> <version>4.0.3</version> <executions> <execution> <id>generate-jaxb-sources</id> <phase>generate-sources</phase> <goals> <goal>wsdl2java</goal> <!-- 处理WSDL --> <!-- 处理XSD可改用xsdtojava目标 --> <!-- <goal>xsdtojava</goal> --> </goals> <configuration> <wsdlOptions> <wsdlOption> <wsdl>${project.basedir}/src/main/resources/wsdl/your-service.wsdl</wsdl> <extraargs> <extraarg>-p</extraarg> <extraarg>com.your.project.client</extraarg> <extraarg>-jakarta</extraarg> </extraargs> </wsdlOption> </wsdlOptions> <!-- 处理XSD时替换为以下配置 --> <!-- <xsdOptions> <xsdOption> <xsd>${project.basedir}/src/main/resources/xsd/your-schema.xsd</xsd> <extraargs> <extraarg>-p</extraarg> <extraarg>com.your.project.model</extraarg> <extraarg>-jakarta</extraarg> </extraargs> </xsdOption> </xsdOptions> --> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>jakarta.xml.bind</groupId> <artifactId>jakarta.xml.bind-api</artifactId> <version>4.0.0</version> </dependency> </dependencies> </plugin>
方案3:直接使用Jakarta JAXB的xjc命令行工具
如果不想依赖Maven插件,可直接用Jakarta官方的xjc工具,通过-jakarta参数生成代码,也可集成到Maven的exec插件中实现自动化构建。
Maven集成配置示例:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>exec</goal> </goals> <configuration> <executable>xjc</executable> <arguments> <argument>-d</argument> <argument>${project.build.directory}/generated-sources</argument> <argument>-p</argument> <argument>com.your.project.model</argument> <argument>-jakarta</argument> <argument>${project.basedir}/src/main/resources/xsd/your-schema.xsd</argument> </arguments> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>jakarta.xml.bind</groupId> <artifactId>jakarta.xml.bind-api</artifactId> <version>4.0.0</version> </dependency> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-xjc</artifactId> <version>4.0.3</version> </dependency> </dependencies> </plugin>
关键注意事项
- 所有依赖必须使用Jakarta版本(groupId以
jakarta.*开头),禁止混合javax和jakarta依赖,否则会出现类冲突或注解不兼容问题。 - 优先选择最新版本的插件/工具,老旧版本大多未适配Jakarta规范,容易出现javax相关报错。
- 如需自定义POJO注解(如Jackson的
@JsonProperty),可配合jaxb2-basics-annotate插件及绑定文件实现。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

