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

Java8迁移至Java9遭遇NoClassDefFoundError问题求助

解决Java8迁移Java9时的JAXB相关Bean创建异常

这种问题我之前帮好几个开发者排查过,核心原因是Java9的模块化系统将JAXB(Java Architecture for XML Binding)从JDK默认模块中移除,再加上旧版本Spring对Java9模块系统的兼容性不足,导致了NoClassDefFoundError。咱们一步步来解决:

1. 确认Spring版本兼容性

首先要确保你的Spring版本支持Java9:

  • Spring 4.x系列:必须升级到4.3.10.RELEASE及以上,这个版本才开始适配Java9的模块系统
  • Spring 5.x系列:推荐使用5.0.0.RELEASE及以上,完全支持Java9及后续版本

如果你的Spring版本低于上述要求,先升级Spring核心、context、beans等相关依赖的版本。

2. 添加JAXB相关依赖到pom.xml

Java9不再自带JAXB的实现类,需要手动引入完整的JAXB依赖到你的项目中:

<!-- JAXB API -->
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
<!-- JAXB 实现 -->
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.1</version>
    <scope>runtime</scope>
</dependency>
<!-- JAXB 核心 -->
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>2.3.0.1</version>
</dependency>
<!-- 激活框架(JAXB依赖) -->
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>

3. 配置maven-compiler-plugin的Java9模块参数

在pom.xml的maven-compiler-plugin中添加Java9的模块参数,显式引入JAXB相关模块,避免模块访问限制:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <release>9</release>
                <compilerArgs>
                    <!-- 显式添加JAXB相关模块 -->
                    <arg>--add-modules</arg>
                    <arg>java.xml.bind,java.activation</arg>
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

4. 排查依赖冲突

有时候项目中可能存在旧版本的JAXB依赖,导致冲突。可以通过以下Maven命令查看依赖树:

mvn dependency:tree -Dverbose | grep jaxb

如果发现有不同版本的JAXB依赖,通过<exclusions>标签排除旧版本的冲突依赖,确保所有JAXB相关依赖版本统一。

5. 验证与清理

完成上述配置后,执行以下步骤确保生效:

  • 清理Maven本地缓存:mvn clean install -U
  • 重新运行你的测试或应用,检查是否还存在异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:21:24