Eclipse中单独运行JUnit测试用例出现NoClassDefFoundError求助
问题描述
执行mvn package时JUnit测试用例能正常运行,但在Eclipse中右键选择「Run As JUnit Test Case」时抛出如下错误:
java.lang.NoClassDefFoundError: org/apache/pdfbox/pdmodel/PDDocument
at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3166)
at java.base/java.lang.Class.getMethodsRecursive(Class.java:3307)
at java.base/java.lang.Class.getMethod0(Class.java:3293)
at java.base/java.lang.Class.getMethod(Class.java:2106)
at org.junit.internal.builders.SuiteMethodBuilder.hasSuiteMethod(SuiteMethodBuilder.java:18)
at ...
本地Maven仓库(m2文件夹)中已存在对应的PDFBox jar包,求解决建议。
对应的pom.xml内容:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>mkl.testarea.pdfbox2</groupId> <artifactId>testarea-pdfbox2</artifactId> <version>${pdfbox.version}</version> <name>Test area for public PDFBox v2 issues on stackoverflow etc</name> <properties> <pdfbox.version>2.0.29</pdfbox.version> <bc.version>1.70</bc.version> <junit.version>4.11</junit.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>com.github.dhorions</groupId> <artifactId>boxable</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>com.github.jai-imageio</groupId> <artifactId>jai-imageio-core</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>com.github.vandeseer</groupId> <artifactId>easytable</artifactId> <version>0.3.0</version> </dependency> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>net.sf.cssbox</groupId> <artifactId>pdf2dom</artifactId> <version>2.0.1</version> </dependency> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>${pdfbox.version}</version> </dependency> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>fontbox</artifactId> <version>${pdfbox.version}</version> </dependency> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox-examples</artifactId> <version>${pdfbox.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>${bc.version}</version> <type>jar</type> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcpkix-jdk15on</artifactId> <version>${bc.version}</version> <type>jar</type> </dependency> </dependencies> <build> <testSourceDirectory>src/test/java</testSourceDirectory> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.18.1</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.11</source> <target>1.11</target> <testOutputDir>${basedir}/target/test-classes</testOutputDir> </configuration> </plugin> </plugins> </pluginManagement> </build> </project>
解决建议
- 同步Eclipse与Maven依赖:右键项目 → Maven → Update Project,勾选「Force Update of Snapshots/Releases」后点击OK,强制IDE同步本地仓库的依赖文件,解决缓存不一致问题。
- 检查JUnit运行配置的类路径:右键测试类 → Run As → Run Configurations → 找到对应JUnit配置 → 切换到「Classpath」标签页,确认PDFBox的jar包是否在「Maven Dependencies」或「User Entries」中。若缺失,手动点击「Add JARs」添加本地m2仓库中的
pdfbox-2.0.29.jar。 - 统一JDK版本:右键项目 → Properties → Java Build Path → Libraries,确认JRE System Library为JDK 11;再进入Java Compiler页面,确保编译版本也是11,避免因JDK版本不兼容导致类加载失败。
- 清理重建项目:先执行
mvn clean install,再在Eclipse中点击Project → Clean,选择当前项目清理后重新编译,再运行测试用例。 - 临时排查依赖范围:可尝试将pom.xml中pdfbox依赖的scope改为
test(测试后改回compile),确认是否因依赖范围配置导致测试代码无法访问该类。
内容的提问来源于stack exchange,提问作者desperado06
相关产品推荐
相关产品推荐

