2014-12-23 147 views
2

我使用OpenCSV读取和写入CSV文件。它工作得很好,直到我HSD安装Java的早期版本 - 即Java的6.安装它之后,我的代码停止工作:使用OpenCSV读取文件

Exception in thread "main" java.lang.UnsupportedClassVersionError: com/opencsv/CSVReader : Unsupported major.minor version 51.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(Unknown Source) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source)

enter image description here

enter image description here

+0

重复:http://stackoverflow.com/questions/10382929/unsupported-major-minor-version-51-0? – aioobe

回答

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依赖项。

UPDATE

SourceForge,2.3版包含了应该是适合你的JAR文件:

$ javap -verbose -cp deploy/opencsv-2.3.jar au.com.bytecode.opencsv.CSVReader | grep major 
    major version: 50 

注意,包名是从当前版本稍有不同。

+0

你能请注明以前版本的opencsv的下载链接。我刚刚安装了2.1,它不再工作。 –

+0

我找到一个,看到我更新的帖子 – janos

0

当OpenCSV升级到3.0时,决定升级到Java 7.这是由于几个原因完成的。主要原因是,最大的原因是3.0中的主要修复是为了支持Grails中的Lambdas的懒惰检查(可能是Java 8),所以它被要求在Java 7中编译代码,因为它对Grails更为优化。我允许这样做,因为甲骨文已经宣布2015年不再支持Java 7,并且Java已经不再支持了,而且我还有少量电子邮件询问我何时将opencsv移植到java 7(并且只有一个用于Java 8出于某种原因),所以我觉得移动到Java 7是安全的。最后一点是我使用mac开发,不再能够访问java 5编译器,我真的不想推出使用java 7构建的opencsv的Java 5版本。

在事后看到问题这导致了(你是我知道的第三个因为这个原因无法升级)的人,我将它放在Java 5上,并要求Grails用户执行性能测试,并且我自己在我的Mac上的Ubuntu VM中构建opencsv。但因为它已经结束,所以我不想降级并可能影响用户。

如果您不能将项目升级到java 7,您确实有两种选择:第一种是在sourceforge和maven存储库上可以下载旧版本。所以2.4和更早版本是使用java 5构建的。另一种选择是您可以下载代码并自行构建它。感谢KommradHomer,当前的代码库与Java 6兼容,并且将像Java 6编译器一样构建(您只需更改pom文件)。

0

我看到相同的问题。请让我知道我可以使用哪个版本的openCSV与Java版本“1.6.0_22”兼容? OpenCSV 2.3不适用于我。

+0

尝试2.2或2.4。恐怕2.3可能无意中编译为1.7。 –

+0

谢谢..让我试试.. –