2009-10-23 75 views
10

我试图让卡桑德拉在OS X上运行当我运行bin/cassandra,我得到以下错误:Java错误:试图在OS X上运行卡桑德拉当.class文件错误错误版本号

~/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 

有关我在做什么错的任何想法?

+1

找到wheress Cassandra是存储类文件,干净,并做一个构建,这应该解决IMO的问题 – Narayan 2009-10-23 06:54:27

回答

17

坏的版本号是几乎总是因为你已经编译你的java文件有一个版本的类文件,并试图使用早期版本上运行它。

您需要确定这个“cassandra”使用的是您认为它的Java版本。它不一定使用从命令提示符运行java时得到的同一个。

2

在卡桑德拉/ bin中的文件中cassandra.in.sh在文件的底部添加以下两行:

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

这将是足以让斌/ Cassandra的运行。要让其他shell脚本可以使用这个 ,您可能需要修补程序590并修复其他shell脚本以使用JAVA_HOME和JAVA变量。

3

如果你使用maven投入的pom.xml,所以这样一来就会1.5编译即使u使用1.6

<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>