使用OpenCSV(Maven)时如何解决NoClassDefFoundError问题?
解决java.lang.NoClassDefFoundError: org/apache/commons/lang3/ObjectUtils异常
异常原因
java.lang.NoClassDefFoundError表明JVM在运行时找不到org.apache.commons.lang3.ObjectUtils类,这个类属于Apache Commons Lang3工具库,你的项目要么没引入这个库,要么运行时类路径没包含对应的jar包。
解决方法
手动管理jar包的情况
- 下载Apache Commons Lang3的jar包,将其放到项目的lib目录中。
- 运行程序时,确保该jar包被加入类路径。比如命令行运行时:
注:# Windows系统 java -cp ".;lib/commons-lang3-x.x.jar;lib/opencsv-x.x.jar" 你的主类名 # Linux/macOS系统 java -cp ".:lib/commons-lang3-x.x.jar:lib/opencsv-x.x.jar" 你的主类名opencsv-x.x.jar是你使用CSVReader依赖的jar包,也要确保它在类路径中。
使用Maven管理项目的情况
在pom.xml中添加以下依赖:
<!-- Apache Commons Lang3 依赖 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.14.0</version> <!-- 可替换为最新稳定版 --> </dependency> <!-- opencsv 依赖(CSVReader所属库) --> <dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version>5.6</version> <!-- 匹配你使用的版本 --> </dependency>
执行mvn clean install更新依赖后重新运行程序。
使用Gradle管理项目的情况
在build.gradle中添加依赖:
implementation 'org.apache.commons:commons-lang3:3.14.0' implementation 'com.opencsv:opencsv:5.6'
执行gradle build后重新运行程序。
顺带修正你的代码问题
原代码中,while循环结束后data会是null,后续的for循环会触发NullPointerException,同时catch块只打印"hiiii"无法排查异常,建议修改为:
try { CSVReader input = new CSVReader(new FileReader("s.csv")); String[] data; while ((data = input.readNext()) != null) { String id = data[0]; String name = data[1]; String password = data[2]; String number = data[3]; String gender = data[4]; String mail = data[5]; String department = data[6]; // 把打印逻辑放到循环内,避免空指针 for(int i = 0; i < data.length; i++) { System.out.println(data[i]); } System.out.println("=========================="); } } catch (Exception ex) { // 打印完整异常栈信息,便于排查问题 ex.printStackTrace(); }
内容的提问来源于stack exchange,提问作者unknown doubts
相关产品推荐
相关产品推荐

