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

使用jaxb2-rich-contract-plugin生成两个Builder时遇重复类异常

解决JAXB2 Rich Contract Plugin生成重复工具类的问题

我之前也碰到过一模一样的问题,你遇到的duplicate class: com.kscs.util.jaxb.Copyable和Buildable错误,本质是因为每个Maven execution执行时,插件都会默认生成一套通用工具类,而这些类的包名和类名完全一致,当两次生成的目录都被加入编译路径时,就会触发重复类冲突。

核心解决方案:只生成一次工具类

我们只需要在其中一个execution中保留工具类生成(-generateTools=y),另一个execution禁用工具类生成(-generateTools=n),同时确保两个execution生成的业务类包名不重叠,就可以解决冲突。

另外你在版本2中尝试修改Builder相关命名的参数其实没用,因为冲突的是通用工具类,不是业务类的Builder类。

修改后的配置示例(基于版本1调整)

<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>0.14.0</version>
    <extensions>true</extensions>
    <configuration>
        <extension>true</extension>
        <plugins>
            <plugin>
                <groupId>net.codesup.util</groupId>
                <artifactId>jaxb2-rich-contract-plugin</artifactId>
                <version>2.0.1</version>
            </plugin>
        </plugins>
    </configuration>
    <executions>
        <!-- 第一个execution:生成order相关类,同时生成工具类 -->
        <execution>
            <id>generate-order</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <args>
                    <arg>-Ximmutable</arg>
                    <arg>-Xcopy</arg>
                    <arg>-partial=n</arg>
                    <arg>-generateTools=y</arg> <!-- 保留工具类生成 -->
                    <arg>-constructor=n</arg>
                    <arg>-narrow=y</arg>
                    <arg>-Xfluent-builder</arg>
                    <arg>-copyPartial=n</arg>
                    <arg>-narrow=y</arg>
                </args>
                <schemaIncludes>
                    <include>xsd/order.xsd</include>
                </schemaIncludes>
                <bindingIncludes>
                    <include>xsd/bindings.xjc</include>
                </bindingIncludes>
                <generatePackage>com.company.order.model.xsd</generatePackage>
                <generateDirectory>${project.build.directory}/generated-sources/xsd</generateDirectory>
            </configuration>
        </execution>
        <!-- 第二个execution:生成extended order相关类,禁用工具类生成 -->
        <execution>
            <id>generate-extended-order</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <args>
                    <arg>-Ximmutable</arg>
                    <arg>-Xcopy</arg>
                    <arg>-partial=n</arg>
                    <arg>-generateTools=n</arg> <!-- 关键:禁用工具类生成 -->
                    <arg>-constructor=n</arg>
                    <arg>-narrow=y</arg>
                    <arg>-Xfluent-builder</arg>
                    <arg>-copyPartial=n</arg>
                    <arg>-narrow=y</arg>
                </args>
                <schemaIncludes>
                    <include>xsd/extended.xsd</include>
                </schemaIncludes>
                <bindingIncludes>
                    <include>xsd/bindings.xjc</include>
                </bindingIncludes>
                <generatePackage>com.company.order.model.extended.xsd</generatePackage>
                <generateDirectory>${project.build.directory}/generated-sources/extended-xsd</generateDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

额外说明

  • 如果你的两个XSD生成的业务类需要不同的插件参数(比如extended不需要-Xcopy),可以像版本2那样分开配置args,但核心还是要确保只有一个execution生成工具类。
  • 工具类(Copyable、Buildable等)是通用的,只需要生成一次,所有业务类都会依赖这些类,所以禁用第二次生成不会影响功能。

内容的提问来源于stack exchange,提问作者Niklas Pragsten

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:42:36