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

使用JAXB 3.0和jaxb2-maven-plugin时-Xannotate参数失效

迁移JAXB从javax.*到jakarta.*时-Xannotate参数不识别问题解决

问题概述

正在把Java类生成逻辑从javax.迁移到jakarta.,当前使用的Maven JAXB插件配置如下:

<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>3.1.0</version>

已将目标版本设为3.0,并添加了两个参数:

<arguments>
    <argument>-Xinject-code</argument>
    <argument>-Xannotate</argument>
</arguments>

xjb绑定文件里配置了annotate来给生成类加Lombok注解:

<jxb:bindings version="3.0"
    xmlns:jxb="https://jakarta.ee/xml/ns/jaxb"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    xmlns:annox="http://annox.dev.java.net"
    jxb:extensionBindingPrefixes="xjc annox">

但运行时直接报错:com.sun.tools.xjc.BadCommandLineException: unrecognized parameter -Xannotate

已试无效的操作

曾尝试添加以下插件依赖,但问题依旧:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <version>3.1.0</version>
    ...
    <dependencies>
        <dependency>
            <groupId>org.patrodyne.jvnet</groupId>
            <artifactId>hisrc-hyperjaxb-annox-plugin</artifactId>
            <version>2.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>
    </dependencies>
</plugin>

可行解决方案

问题出在你用的annox插件版本不兼容Jakarta JAXB 3.0,换成适配版本即可,步骤如下:

1. 替换插件依赖

使用适配Jakarta的jaxb2-basics-annotate插件,同时引入配套的jaxb2-basics工具包,更新后的插件配置:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <goals>
                <goal>xjc</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <target>3.0</target>
        <arguments>
            <argument>-Xinject-code</argument>
            <argument>-Xannotate</argument>
        </arguments>
        <!-- 根据你的实际路径调整bindingDirectory -->
        <bindingDirectory>src/main/resources/bindings</bindingDirectory>
    </configuration>
    <dependencies>
        <!-- 适配Jakarta的jaxb2基础工具和annotate插件 -->
        <dependency>
            <groupId>org.jvnet.jaxb2_commons</groupId>
            <artifactId>jaxb2-basics</artifactId>
            <version>1.11.1</version>
        </dependency>
        <dependency>
            <groupId>org.jvnet.jaxb2_commons</groupId>
            <artifactId>jaxb2-basics-annotate</artifactId>
            <version>1.11.1</version>
        </dependency>
        <!-- Lombok依赖,版本根据你的Java版本调整 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>
    </dependencies>
</plugin>

2. 更新xjb绑定文件的命名空间

把annox和xjc的命名空间换成Jakarta适配的版本,确保配置正确:

<jxb:bindings version="3.0"
    xmlns:jxb="https://jakarta.ee/xml/ns/jaxb"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xjc="https://jakarta.ee/xml/ns/jaxb/xjc"
    xmlns:annox="https://github.com/highsource/jaxb2-annotate-plugin"
    jxb:extensionBindingPrefixes="xjc annox">
    <!-- 示例:给所有生成类添加Lombok的@Data注解 -->
    <jxb:bindings schemaLocation="your-schema-file.xsd" node="/xs:schema">
        <annox:annotate target="class">
            <annox:annotation>org.projectlombok.Data</annox:annotation>
        </annox:annotate>
    </jxb:bindings>
</jxb:bindings>

3. 关键注意点

  • 你之前用的hisrc-hyperjaxb-annox-plugin 2.1.1是基于javax.*的,完全不兼容Jakarta JAXB 3.0,必须替换。
  • 确保插件的target参数保持为3.0,和JAXB版本对齐。
  • Lombok版本要和你的Java版本匹配,比如Java 17建议用1.18.24及以上版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:43:24