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

JDK9升级后遇java.lang.NoClassDefFoundError,除Maven插件外还有何解法?

解决JDK 9升级后javax.annotation.Generated找不到的问题

我之前处理过不少JDK 9升级后遇到的这类问题,核心原因是JDK 9开始移除了原本自带的Java EE相关模块(包括包含javax.annotation.Generated的模块),所以编译时会抛出NoClassDefFoundError。你之前的Maven插件配置没起效,大概率是参数格式不对,试试下面这几种解决方案:

方案1:直接引入javax.annotation-api依赖

这是最稳妥的方式,因为JDK 9+不再自带这个类库,我们手动把它引入项目即可。在你的pom.xml中添加以下依赖:

<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
    <!-- 如果你的运行环境(比如应用服务器)已经提供这个类库,可以用provided scope,否则去掉即可 -->
    <scope>provided</scope>
</dependency>

这个依赖包包含了javax.annotation.Generated类,而且版本1.3.2是稳定适配JDK 9+的版本。

方案2:修正Maven编译插件的配置

你之前的配置里-J--add-modules是错误的——-J前缀是用来传递参数给JVM的,而--add-modules是javac编译器本身的参数,不需要加-J。正确的配置应该是:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>${version.compiler.plugin}</version>
    <configuration>
        <fork>true</fork>
        <compilerArgs>
            <arg>--add-modules</arg>
            <arg>java.xml.ws.annotation</arg>
        </compilerArgs>
        <!-- 明确指定源和目标JDK版本为9,避免编译时版本兼容问题 -->
        <source>9</source>
        <target>9</target>
    </configuration>
</plugin>

⚠️ 注意:java.xml.ws.annotation模块在JDK 9中已经被标记为废弃(deprecated),在JDK 11及以后的版本会被完全移除。如果之后你计划升级到更高版本的JDK,方案1会是更长期的选择。

方案3:替换为JDK自带的生成注解(如果适用)

如果你的代码里的@Generated是由代码生成工具(比如Lombok、JPA、MyBatis等)自动生成的,可以检查这些工具是否支持使用JDK自带的javax.annotation.processing.Generated注解(这个是JDK 9+自带的)。比如修改生成工具的配置,替换注解全类名,这样就不需要额外引入依赖或添加模块参数了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:07:14