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

迁移至Jakarta依赖后,如何用JAXB生成带值构造函数的Java代码?

解决方案:迁移至Jakarta JAXB并生成全参构造函数

下面提供几种可行方案,帮你从XSD生成基于Jakarta依赖且同时包含默认构造函数与全参构造函数的Java代码:

方案1:使用Jakarta适配版的JAXB Commons工具(推荐)

原jaxb2-value-constructor插件已迁移至jaxb-tools项目,该项目完全适配Jakarta EE规范,可配合支持Jakarta的Maven XJC插件使用:

配置示例(基于com.helger.maven的jaxb40-maven-plugin)

<plugin>
    <groupId>com.helger.maven</groupId>
    <artifactId>jaxb40-maven-plugin</artifactId>
    <version>4.0.0</version> <!-- 建议使用最新稳定版 -->
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <!-- 保留你原有的XSD路径等配置 -->
                <args>
                    <arg>-Xvalue-constructor</arg>
                </args>
            </configuration>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>org.jvnet.jaxb</groupId>
            <artifactId>jaxb-tools</artifactId>
            <version>4.0.2</version> <!-- 版本需与插件的Jakarta适配版本匹配 -->
        </dependency>
    </dependencies>
</plugin>

jaxb-tools包含原jaxb2-commons的所有扩展插件(包括value-constructor),生成的代码完全基于Jakarta API。

方案2:用Lombok补全构造函数

若暂时找不到适配的XJC插件,可先通过标准Jakarta JAXB插件生成仅带默认构造函数的代码,再借助Lombok自动生成全参构造函数:

步骤详情:

  1. 使用标准Jakarta JAXB Maven插件生成基础代码:
<plugin>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-maven-plugin</artifactId>
    <version>4.0.4</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <!-- 你的XSD相关配置 -->
            </configuration>
        </execution>
    </executions>
</plugin>
  1. 创建bindings.xjb绑定文件,自动为生成的类注入Lombok注解:
<jaxb:bindings xmlns:jaxb="https://jakarta.ee/xml/ns/jaxb" version="3.0">
    <jaxb:globalBindings>
        <!-- 为所有生成类添加Lombok的无参、全参构造注解 -->
        <jaxb:class name="*">
            <jaxb:annotations>
                <annox:annotate target="class">
                    <annox:annotation type="lombok.AllArgsConstructor"/>
                    <annox:annotation type="lombok.NoArgsConstructor"/>
                </annox:annotate>
            </jaxb:annotations>
        </jaxb:class>
    </jaxb:globalBindings>
</jaxb:bindings>
  1. 在Maven插件中引入依赖,支持注解自动注入:
<dependencies>
    <dependency>
        <groupId>org.jvnet.jaxb2_commons</groupId>
        <artifactId>jaxb2-basics-annotate</artifactId>
        <version>1.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.30</version>
    </dependency>
</dependencies>

最后在插件配置中绑定上述文件:

<configuration>
    <bindingFiles>
        <bindingFile>bindings.xjb</bindingFile>
    </bindingFiles>
</configuration>

方案3:自定义XJC插件

如果上述方案都无法满足需求,可编写简单的自定义XJC插件,在代码生成阶段自动为类添加全参构造函数。自定义插件需实现com.sun.tools.xjc.Plugin接口,重写run方法修改生成的类结构,再将插件打包引入到Maven插件的依赖中。该方式灵活性最高,但需要额外的开发工作量。

内容的提问来源于stack exchange,提问作者Philipp Kemkes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:39:56