部署Google App Engine时出现运行时异常,现有答案无帮助
我之前部署GAE应用的时候也踩过这个一模一样的坑,当时折腾了好半天!这个错误的核心原因其实很直接:部署工具需要调用Java编译器(javac)来处理代码,但你的环境里只有Java运行环境(JRE),没有完整的Java开发工具包(JDK)——哪怕你觉得JAVA_HOME设置没问题,也可能实际安装的是JRE包而非JDK。
先帮你拆解下关键错误信息:
"Unable to stage app: Cannot get the System Java Compiler. Please use a JDK, not a JRE."
这句话已经说得很明白:部署过程需要编译Java代码,而JRE只提供运行代码的能力,没有javac这个编译工具,只有JDK才自带完整的编译环境。
先确认你的环境是不是真的装了JDK
你可以先做两个简单的验证:
- 打开终端运行
javac -version,如果提示"command not found",那百分百是没装JDK; - 查看你的
JAVA_HOME路径下的文件:ls /usr/lib/jvm/java-8-openjdk-amd64/bin/,如果列表里没有javac这个文件,说明这个路径下是JRE,不是JDK。
具体解决步骤
安装OpenJDK 8的JDK包(别再装JRE了!)
如果你用的是Debian/Ubuntu类系统,直接在终端执行这条命令:sudo apt-get update && sudo apt-get install openjdk-8-jdk修正环境变量
安装完成后,重新设置JAVA_HOME和PATH(建议把这两行加到~/.bashrc或者~/.profile里,保证每次登录终端都能生效):export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATH另外注意你的PATH里有个重复的
/usr/lib/jvm/java-8-openjdk-amd64//bin(多了一个斜杠),虽然不影响功能,但建议改成/usr/lib/jvm/java-8-openjdk-amd64/bin,看起来更规范。验证配置是否生效
重新打开终端或者运行source ~/.bashrc刷新配置,然后依次执行以下命令确认:javac -version # 应该输出类似javac 1.8.0_xxx的版本信息 echo $JAVA_HOME # 确认指向的是JDK的安装路径 echo $PATH # 确认JDK的bin目录在PATH最前面,避免被其他JRE路径干扰重新部署应用
现在再执行GAE的部署命令:gcloud app deploy应该就能顺利跳过编译阶段的报错了!
内容的提问来源于stack exchange,提问作者rootmeanclaire

