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

Java 17下maven-jaxb2-plugin从XSD生成XML无输出问题求助

Java 17迁移后maven-jaxb2-plugin不生成代码的解决方案

1. 升级插件至Jakarta兼容版本

旧版本的maven-jaxb2-plugin(0.13.2/0.15.2)基于传统JAXB(javax.xml.bind),无法适配Java 17的Jakarta EE生态。需升级到支持Jakarta XML Binding 3.0+的4.x版本,示例配置如下:

<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>4.0.1</version> <!-- 适配Java 11+与Jakarta JAXB 3.0 -->
    <executions>
        <execution>
            <id>add-source</id>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <schemaDirectory>src/main/resources/META-INF/xsd</schemaDirectory>
                <schemaIncludes>
                    <include>fe2_flux_generique.xsd</include>
                </schemaIncludes>
                <bindingDirectory>src/main/resources/META-INF/xsd</bindingDirectory>
                <bindingIncludes>
                    <include>fe2_flux_generique.xjb</include>
                </bindingIncludes>
                <generateDirectory>${project.basedir}/src/generated</generateDirectory>
                <generatePackage>fr.icdc.dei.ddr.fe2.xml.domain</generatePackage>
                <jaxbVersion>3.0</jaxbVersion> <!-- 明确指定Jakarta JAXB版本 -->
            </configuration>
        </execution>
    </executions>
    <!-- 插件内部依赖Jakarta版本的XJC工具 -->
    <dependencies>
        <dependency>
            <groupId>jakarta.xml.bind</groupId>
            <artifactId>jakarta.xml.bind-api</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-xjc</artifactId>
            <version>3.0.1</version>
        </dependency>
    </dependencies>
</plugin>

2. 修正XJB绑定文件

仅修改命名空间和版本不够,需将javax.xml.bind.DatatypeConverter替换为Jakarta版本(Java 17已移除javax.xml.bind包),修改后的绑定文件:

<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings version="3.0"
    xmlns:jxb="https://jakarta.ee/xml/ns/jaxb"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <jxb:globalBindings>
        <jxb:serializable uid="1" />

        <!-- 替换为Jakarta版本的DatatypeConverter -->
        <jxb:javaType name="java.util.Calendar"
            xmlType="xsd:dateTime"
            parseMethod="jakarta.xml.bind.DatatypeConverter.parseDateTime"
            printMethod="jakarta.xml.bind.DatatypeConverter.printDateTime" />

    </jxb:globalBindings>
</jxb:bindings>

3. 添加项目级Jakarta JAXB依赖

Java 17不再内置JAXB相关类,需在pom.xml中添加API和运行时依赖:

<dependencies>
    <!-- Jakarta JAXB API -->
    <dependency>
        <groupId>jakarta.xml.bind</groupId>
        <artifactId>jakarta.xml.bind-api</artifactId>
        <version>3.0.1</version>
    </dependency>
    <!-- JAXB运行时实现 -->
    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>3.0.1</version>
        <scope>runtime</scope>
    </dependency>
</dependencies>

4. 验证构建命令

执行完整的生成命令,确保触发代码生成阶段:

mvn clean generate-sources

若仍无文件生成,可添加-X参数查看详细日志,排查schema解析或绑定配置的潜在错误:

mvn clean generate-sources -X

5. 可选:调整生成目录

原配置的src/generated可能存在权限或maven规范问题,建议改用maven标准生成目录:

<generateDirectory>${project.build.directory}/generated-sources/xjc</generateDirectory>

该目录默认会被maven识别为源码目录,无需额外配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 07:35:56