2009-10-23 6 views
10

Próbuję dostać Cassandra do pracy na OS X. Kiedy biegnę bin/cassandra, pojawia się następujący błąd:Błąd Java: Bad numer wersji w pliku .class błędu podczas próby uruchomienia Cassandrę na 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) 

Z tego, co mogłem ustalić przez wyszukiwanie, ten błąd jest związany z niekompatybilnymi wersjami Java. Jednak, o ile mogę powiedzieć, mam najnowszą wersję 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 

Jakieś pomysły na temat tego, co robię źle?

+1

zlokalizować wheress Cassandra jest przechowywanie plików klas, oczyścić i zrobić kompilacji, to powinno rozwiązać problem IMO – Narayan

Odpowiedz

17

Zła wersja jest prawie zawsze bo masz skompilowany plik Java do pliku klasy z jednej wersji i próbuje go uruchomić z wcześniejszej wersji.

Musisz mieć pewność, że ta "kassandra" używa wersji Java, którą Twoim zdaniem jest. Niekoniecznie używa tego samego, co podczas uruchamiania java z wiersza poleceń.

2

W Cassandra/bin w pliku cassandra.in.sh dodać następujące 2 linie na końcu pliku:

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

To wystarczy, aby dostać bin/Cassandra uruchomić. Aby inne skrypty powłoki działały z tym , możesz potrzebować poprawki 590 i naprawić inne skrypty powłoki, aby używać zmiennych JAVA_HOME i JAVA.

3

Jeśli używasz Maven umieścić w pom.xml, więc w ten sposób, że zostanie skompilowany przez 1,5 nawet jeśli u używać 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> 
Powiązane problemy