【问题标题】:UnsupportedClassVersionError when starting Cassandra 2.0.6启动 Cassandra 2.0.6 时出现 UnsupportedClassVersionError
【发布时间】:2014-05-22 19:48:26
【问题描述】:

我完全知道这个问题已经在这个帖子中以某种方式提出:

Cassandra:UnsupportedClassVersionError

但是,我接受的那里给出的答案并不能解决我的问题,因为我确实有一个当前版本的 Java,详情如下:

D:\Development\Cassandra\apache-cassandra-2.0.6>java -version

java 版本“1.7.0_45” Java(TM) SE 运行时环境 (build 1.7.0_45-b18) Java HotSpot(TM) Client VM(build 24.45-b08,混合模式,共享)

知道了这一点,我在启动Cassandra时仍然收到错误:

D:\开发\Cassandra\apache-cassandra-2.0.6>bin\cassandra -f 启动 Cassandra 服务器 线程“主”java.lang.UnsupportedClassVersionError 中的异常:org/apache/cassandra/service/CassandraDaemon:不支持的major.minor 版本51.0 在 java.lang.ClassLoader.defineClass1(本机方法) 在 java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) 在 java.lang.ClassLoader.defineClass(ClassLoader.java:615) 在 java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 在 java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 在 java.net.URLClassLoader.access$000(URLClassLoader.java:58) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:197) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:190) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:306) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:247) 找不到主类:org.apache.cassandra.service.CassandraDaemon。程序将退出。

我在 Windows XP 机器上运行,使用命令提示符(不是 Cygwin)来启动 Cassandra,我能够毫无问题地启动旧版本的 Cassandra(apache-cassandra-1.1.4)。我是在使用更高版本的 Cassandra 时做错了什么,还是在我的配置中遗漏了一些非常明显的东西?

【问题讨论】:

  • 如何启动 cassandra?堆栈跟踪绝对不是由 Java 7 虚拟机生成的。
  • 我使用 bin\cassandra -f 启动它,就像启动旧版本时一样。
  • JAVA_HOME 环境变量可能指向JDK6,而PATH 指向JDK7。这可以从命令行解释正确的 java 版本,而从 cassandra 启动脚本解释不正确。 "%JAVA_HOME%\bin\java" -version(在 Windows 上)的输出是什么?
  • 或者在您的cassandra.in.sh 之一中有一个JAVA_HOME 条目。
  • 不,我已经确定我的 JAVA_HOME 和 PATH 都包含正确的设置,例如JAVA_HOME = D:\Development\Java\jdk1.7.0_45\ 和 PATH = D:\Development\Java\jdk1.7.0_45\bin;

标签: java cassandra


【解决方案1】:

唯一对该异常的合理解释是 Java 6(或更早版本)JVM 正在用于运行为 Java 7 目标平台编译的代码。

这与您认为正在发生的事情相矛盾。然而,这是唯一合理的解释。

我建议您复制cassandra 包装脚本(在同一目录中),然后将其破解到:

  1. 在开头添加 set -x 以查看脚本实际运行的命令。

  2. 添加echo $PATH、echo $JAVA_HOME等,看看脚本环境中有哪些关键的环境变量。

  3. 添加一行以使用与实际运行 JVM 完全相同的命令路径运行 java -version。

这应该可以揭示您对正在发生的事情的哪些信念/假设是不正确的。

【讨论】:

    【解决方案2】:

    我确实尝试卸载 java 1.7 并安装最新的 java 8 解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      • 2013-05-25
      • 2016-08-01
      • 2013-05-26
      • 1970-01-01
      相关资源
      最近更新 更多