我使用OpenCSV进行CSV文件的读写。它工作正常,直到我想安装早期版本的Java - 即Java 6.安装后,我的代码停止工作:
线程中的异常" main"因为java.lang.UnsupportedClassVersionError: com / opencsv / CSVReader:不支持的major.minor版本51.0 at java.lang.ClassLoader.defineClass1(Native Method)at java.lang.ClassLoader.defineClassCond(未知来源)at java.lang.ClassLoader.defineClass(未知来源)at java.security.SecureClassLoader.defineClass(未知来源)
答案 0 :(得分:4)
检查OpenCSV .jar
依赖关系中的类文件的版本,例如:
javap -verbose -cp opencsv.jar com.opencsv.CSVReader | grep major
如果显示的版本高于50(=比Java 6更新),则无法使用此jar。
您需要获得使用Java 6或更早版本构建的.jar
文件。 (如果它可以用Java 6构建。)
我刚刚确认最新版本的源代码不能用Java 6编译, 因为它使用Java 7功能(自然)。 但不久前,截至2014年8月,该项目仍在Java 5上。 因此,如果您下载旧版本的jar,它应该可以工作。
换句话说,既然你降级了Java版本, 您还需要降级OpenCSV依赖项。
<强>更新强>
从SourceForge开始,版本2.3包含一个适合您的jar文件:
$ javap -verbose -cp deploy/opencsv-2.3.jar au.com.bytecode.opencsv.CSVReader | grep major
major version: 50
请注意,程序包名称与当前版本略有不同。
答案 1 :(得分:0)
当OpenCSV升级到3.0时,决定升级到Java 7.这样做有几个原因。主要原因是最大的原因是3.0中的主要修复是支持Grails(可能是Java 8)中Lambdas的延迟检查,所以要求代码在Java 7中编译,因为它对Grails更为理想。我允许这样做是因为甲骨文已经宣布它将在2015年放弃对Java 7的支持以及Java 5&amp; 6很久以来一直没有得到支持加上我收到少量电子邮件,询问我什么时候将opencsv移植到java 7(由于某种原因只有java 8的端口)所以我觉得转移到java 7是安全的。最后一个是我使用mac开发并且不再能够访问java 5编译器而且我真的不喜欢推出使用java 7构建的opencsv的Java 5版本。
事后看到这引起的问题(你知道的第三个因为这个问题无法升级)我会把它留在Java 5并要求Grails用户执行性能测试并自己构建opencsv in我的Mac上的Ubuntu VM。但由于它已经出局,我不想降级并可能影响用户。
如果你不能将项目升级到java 7,你有两个选择:第一个是在sourceforge和maven存储库上你可以下载旧版本。所以2.4和更早版本是使用java 5构建的。另一个选择是你可以下载代码并自己构建它。感谢KommradHomer,当前的代码库与Java 6兼容,并且将使用Java 6编译器进行构建(您只需要更改pom文件)。
答案 2 :(得分:0)
我看到了同样的问题。请告诉我哪个版本的openCSV可以与java版“1.6.0_22”兼容? OpenCSV 2.3对我不起作用。