Ошибка Java: неверный номер версии в.class файле ошибка при попытке запустить Cassandra в OS X
Я пытаюсь заставить Кассандру работать на 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 ответа
Плохой номер версии почти всегда, потому что вы скомпилировали свой java-файл в файл класса с одной версией и пытаетесь запустить его с более ранней версией.
Вы должны быть уверены, что эта "Кассандра" использует версию Java, которую вы считаете. Это не обязательно использовать тот же, который вы получаете при запуске Java из командной строки.
Если вы используете maven, поместите в pom.xml, таким образом, он будет компилироваться на 1.5, даже если вы используете 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>
В файле cassandra/bin в файле cassandra.in.sh добавьте следующие 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
Этого будет достаточно, чтобы заставить работать бен / кассандру. Чтобы заставить другие сценарии оболочки работать с этим, вам может потребоваться исправление 590 и исправление других сценариев оболочки для использования переменных JAVA_HOME и JAVA.