Java 7升级至Java 11遇NoClassDefFoundError错误求助
解决Java 11下
javax/annotation/PreDestroy缺失的问题 问题根源
Java 9开始推行模块化系统,原JDK中包含的JEE相关javax.annotation包被移除,这些API不再属于JDK核心类库,因此升级到Java 11后会出现NoClassDefFoundError。
解决方案
需要手动引入包含javax.annotation相关API的第三方依赖,以下是适配Ant构建的具体操作:
方式一:手动添加Jar包
- 下载
javax.annotation-api-1.3.2.jar(当前稳定版) - 将Jar包放入项目的
lib目录 - 修改Ant的
build.xml,确保该Jar被纳入编译和运行的Classpath:<!-- 定义项目Classpath --> <path id="project.classpath"> <fileset dir="lib" includes="**/*.jar"/> <!-- 保留原有其他依赖配置 --> </path> <!-- 编译任务引用Classpath --> <javac srcdir="src" destdir="bin" classpathref="project.classpath" source="11" target="11"/> <!-- 运行任务引用Classpath --> <java classname="你的主类全限定名" classpathref="project.classpath"/>
方式二:用Ant Ivy管理依赖(若项目已集成Ivy)
在ivy.xml中添加依赖配置,让Ivy自动下载并管理Jar包:
<dependency org="javax.annotation" name="javax.annotation-api" rev="1.3.2" conf="compile->default"/>
确保Ant的构建流程包含Ivy的resolve任务,将依赖自动引入Classpath。
验证
重新执行Ant构建并运行项目,javax/annotation/PreDestroy的缺失错误应该会消失。如果还有PostConstruct等同包类的缺失,该Jar也已包含这些类,无需额外引入。
内容的提问来源于stack exchange,提问作者Nani
相关产品推荐
相关产品推荐

