2009-10-23 12 views
10

Io sto cercando di ottenere Cassandra a lavorare su OS X. Quando eseguo bin/cassandra, ottengo il seguente errore:errore Java: il numero di versione inappropriato per errore file .class quando si tenta di eseguire Cassandra su OS X

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

Da ciò che è stato possibile determinare effettuando una ricerca, questo errore è correlato a versioni incompatibili di Java. Tuttavia, per quanto posso dire, ho l'ultima versione di 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 

Qualche idea su cosa sto facendo male?

+1

individuare wheress Cassandra è la memorizzazione di file di classe, pulito e fare una build, questo dovrebbe risolvi il problema IMO – Narayan

risposta

17

Il numero di versione errata è quasi sempre perché hai compilato il file java in un file di classe con una versione e stai provando a eseguirlo con una versione precedente.

È necessario essere certi che questa "cassandra" stia utilizzando la versione Java che si ritiene. Non sta necessariamente usando lo stesso che si ottiene quando si esegue java dal prompt dei comandi.

2

In Cassandra/bin nel file cassandra.in.sh aggiungere le seguenti 2 righe alla fine del file:

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

Questo sarà sufficiente per ottenere bin/Cassandra per l'esecuzione. Per far funzionare gli altri script della shell con questo potresti aver bisogno della patch 590 e correggere gli altri script della shell per usare le variabili JAVA_HOME e JAVA.

3

Se si utilizza Maven messo in pom.xml, così in questo modo si avrà la compilazione del 1,5 anche se u utilizzare 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> 
Problemi correlati