Java 10环境下Cassandra无法启动,如何让其识别合规Java版本?
解决Cassandra 3.11.2无法识别Java 10版本的问题
这个问题我之前也碰到过,根源在于Cassandra 3.11.x的Windows启动脚本对Java 9+的版本号格式兼容不好——Java 8及以前是1.8.0_xx这种格式,但Java 9+改成了10.0.1,脚本里的版本检测逻辑没跟上,所以明明版本符合要求却报错了。给你几个可行的解决办法:
方案一:修改Cassandra的启动脚本(最直接的修复)
Cassandra的Windows启动脚本cassandra.bat在bin目录下,里面的版本检测代码没有适配Java 9+的版本格式,我们手动修改它:
- 打开
C:\你的Cassandra路径\bin\cassandra.bat文件 - 找到检测Java版本的代码块(大概在脚本前半部分),原逻辑大概是这样的:
for /f "tokens=3" %%g in ('java -version 2^>^&1 ^| findstr /i "version"') do ( set JAVA_VERSION=%%g ) set JAVA_VERSION=%JAVA_VERSION:"=% for /f "delims=. tokens=1-3" %%v in ("%JAVA_VERSION%") do ( set MAJOR=%%v set MINOR=%%w set BUILD=%%x ) if "%MAJOR%" EQU "1" ( if "%MINOR%" LSS "8" ( echo Cassandra 3.0 and later require Java 8u40 or later. goto error ) if "%MINOR%" EQU "8" ( if "%BUILD%" LSS "40" ( echo Cassandra 3.0 and later require Java 8u40 or later. goto error ) ) ) else ( if "%MAJOR%" LSS "9" ( echo Cassandra 3.0 and later require Java 8u40 or later. goto error ) ) - 修改
else分支的逻辑,让Java 9+版本直接通过检测:
将原else部分替换成:) else ( rem Java 9或更高版本,直接判定为符合要求 goto version_ok ) :version_ok - 保存修改后,重启命令提示符/PowerShell,再运行
cassandra -f试试。
方案二:手动设置JAVA_HOME环境变量
有时候Cassandra可能没正确找到Java的安装路径,即使你把bin目录加到了PATH:
- 右键「此电脑」→ 属性 → 高级系统设置 → 环境变量
- 在「系统变量」区域点击「新建」,变量名填
JAVA_HOME,变量值填你的JDK 10安装路径(比如C:\Program Files\Java\jdk-10.0.1) - 点击确定保存,然后关闭并重新打开你的命令提示符/PowerShell,再启动Cassandra。
方案三:降级到Java 8(官方推荐方案)
虽然Java 9+理论上兼容,但Cassandra 3.11.x对Java 9及以上版本的支持是实验性的,官方更推荐使用Java 8u40及以上版本。如果修改脚本嫌麻烦,可以卸载Java 10,安装符合要求的Java 8版本,这样启动脚本就能正常识别了。
另外提一句,启动时的swap警告,你可以按照提示关闭Windows的页面文件,或者暂时忽略,但关闭swap确实能提升Cassandra的运行性能和稳定性。
内容的提问来源于stack exchange,提问作者Roddy of the Frozen Peas
相关产品推荐
相关产品推荐

