Java错误:尝试在OS X上运行Cassandra时,.class文件中的版本号错误

时间:2009-10-23 03:59:47

标签: java

我想让Cassandra在OS X上工作。当我运行bin/cassandra时,我收到以下错误:

~/apache-cassandra-incubating-0.4.1-src > bin/cassandra -f
Listening for transport dt_socket at address: 8888
Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file
 at java.lang.ClassLoader.defineClass1(Native Method)
 at java.lang.ClassLoader.defineClass(ClassLoader.java:675)
 at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
 at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
 at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
 at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:316)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:280)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
 at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:374)

通过搜索我可以确定,此错误与Java的不兼容版本有关。但是,据我所知,我有最新版本的Java:

    ~/apache-cassandra-incubating-0.4.1-src > java -version
    java version "1.6.0_13"
    Java(TM) SE Runtime Environment (build 1.6.0_13-b03-211)
    Java HotSpot(TM) 64-Bit Server VM (build 11.3-b02-83, mixed mode)
    ~/apache-cassandra-incubating-0.4.1-src > javac -version
    javac 1.6.0_13
    ~/Downloads/apache-cassandra-incubating-0.4.1-src > echo $JAVA_HOME
    /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home

关于我做错的任何想法?

3 个答案:

答案 0 :(得分:17)

错误的版本号几乎始终,因为您已将java文件编译为具有一个版本的类文件,并尝试使用早期版本运行它。

您需要确定此“cassandra”正在使用您认为的Java版本。它不一定使用从命令提示符运行java时获得的那个。

答案 1 :(得分:3)

如果你使用maven put in pom.xml,那么这样它即使你使用1.6也会编译1.5

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <source>1.5</source>
      <target>1.5</target>
      <debug>true</debug>
    </configuration>
  </plugin>

答案 2 :(得分:2)

在文件cassandra.in.sh中的cassandra / bin中,在文件底部添加以下2行:

JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
JAVA=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Commands/java

这足以让bin / cassandra运行。让其他shell脚本与此一起使用 您可能需要修补程序590并修复其他shell脚本以使用JAVA_HOME和JAVA变量。