升级macOS至Big Sur后Grails应用无法运行如何解决?
这个问题太典型了——Big Sur之后系统默认的Java路径指向的是JRE(Java运行环境),而Grails编译Groovy代码需要的是**JDK(Java开发工具包)**里的tools.jar,JRE里根本没有这个文件,所以才会报这个错。我帮好几个朋友解决过这个问题,给你一步步来:
第一步:找到你的JDK安装路径
先打开终端,输入这条命令列出所有已安装的Java版本:
/usr/libexec/java_home -V
你会看到类似这样的输出(版本号可能不一样):
Matching Java Virtual Machines (2): 1.8.0_301, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Home 1.6.0_65-b14-468, x86_64: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
记下那个JDK的完整路径(比如上面的/Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Home),这才是我们需要的正确路径。
第二步:设置JAVA_HOME指向JDK
系统默认的JAVA_HOME指向的是错误的JRE路径,我们需要把它改成JDK的路径:
临时生效(仅当前终端会话)
直接在终端输入:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Home
替换成你刚才记下的路径,然后再运行你的Grails命令试试,应该就能正常编译了。
永久生效(所有终端会话都生效)
Big Sur默认用的是zsh shell,如果你用的是bash,对应改配置文件就行:
- zsh用户:编辑
~/.zshrc文件,添加一行:
这里的export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)-v 1.8指定JDK版本,如果你装的是11,就改成-v 11。保存后,输入source ~/.zshrc让配置生效。 - bash用户:编辑
~/.bash_profile,同样添加上面那行,然后source ~/.bash_profile生效。
第三步:检查IDE配置(如果用IDE运行Grails)
如果你是在IntelliJ或其他IDE里运行Grails,还要确保IDE的JDK配置正确:
- 打开IDE的「Project Structure」(快捷键:Cmd+;)
- 在「SDKs」里添加你安装的JDK,而不是系统默认的JRE
- 把项目的Project SDK和Module SDK都设置成这个JDK
为什么会出现这个问题?
Big Sur之后,苹果调整了Java的默认路径,系统默认的java命令指向的是/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home——这是JRE的路径,只包含运行Java程序的必要文件,没有开发用的tools.jar。而Grails在编译Groovy代码时必须依赖这个文件,所以必须让JAVA_HOME指向完整的JDK安装目录。
内容的提问来源于stack exchange,提问作者Chris Okebata

