You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:55:17