Java程序调用getAnnotation(Test.class)时触发ClassNotFoundException的解决办法
问题分析与解决方法
你的问题核心是运行时类路径中缺失JUnit Jupiter API的依赖——虽然编译阶段因为pom.xml中添加了依赖能正常通过,但运行main方法时JVM找不到org.junit.jupiter.api.Test类。而Override.class属于Java核心类库(java.lang包),JVM默认会加载该包下的类,所以替换后程序能正常运行。
以下是具体解决方案:
1. 修正JUnit依赖的Scope
检查pom.xml中JUnit Jupiter API的依赖配置,如果scope设置为test,该依赖仅会被加入测试代码的类路径,main程序运行时不会包含。需要将scope改为compile或者直接删除scope标签(默认scope为compile):
<dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.9.2</version> <!-- 使用你实际的版本号 --> <!-- 移除<scope>test</scope> 或改为<scope>compile</scope> --> </dependency>
2. 确保运行时类路径包含JUnit依赖
用Maven运行程序
如果使用Maven执行main方法,推荐使用exec:java插件,它会自动将所有依赖(包括JUnit)加入运行类路径:
mvn exec:java -Dexec.mainClass="Lab12" -Dexec.args="com.yourpackage.YourTestClass"
命令行手动指定类路径
如果直接用java命令运行,需要手动将JUnit的jar包和项目编译后的class文件加入类路径:
# Windows系统用;分隔类路径 java -cp "target/classes;path/to/junit-jupiter-api-5.9.2.jar" Lab12 com.yourpackage.YourTestClass # Linux/macOS系统用:分隔类路径 java -cp "target/classes:path/to/junit-jupiter-api-5.9.2.jar" Lab12 com.yourpackage.YourTestClass
3. IDE运行配置检查
如果在IDE(如IntelliJ IDEA、Eclipse)中运行,检查Run Configuration的Classpath配置:
- 确保JUnit Jupiter API的jar包被包含在"Classpath"列表中
- 若之前依赖是test scope,IDE可能默认不会将其加入main程序的运行类路径,需手动添加或调整依赖scope后重新导入Maven项目
内容的提问来源于stack exchange,提问作者Student
相关产品推荐
相关产品推荐

