首页 / 资讯中心 / 文章详情

macOS下JDK 1.8安装配置指南:版本选择、环境变量与常见问题

macOS下JDK 1.8安装配置指南:版本选择、环境变量与常见问题 ★ FEATURED ARTICLE
1. 先搞清楚这件事你要装的JDK 1.8到底该怎么选如果你正在macOS上折腾Java开发环境大概率绕不开JDK 1.8。虽然Oracle早就停止了对Java 8的免费商用更新但国内绝大多数公司、老项目、中间件体系仍然跑在JDK 8上。Spring Boot 2.x、Hadoop生态、大部分国产化组件默认基线就是Java 8。所以说它是“目前主流版本的jdk”一点都不夸张。在动手安装之前你得先想清楚一个问题你下载的“JDK 1.8”到底是哪一家出的这里的水很深我见过太多人装完之后发现版本不对、架构不对甚至把系统自带的环境搞乱最后只能重装系统或者花半天时间清理。目前macOS上能用的JDK 8主要有三类来源Oracle JDK 8官方发行版带JavaFX、带商业许可限制。从2019年4月之后Oracle JDK 8的商用授权变成了付费模式个人开发和学习使用倒是没问题但公司商用是有法律风险的。OpenJDK 8开源社区版本各Linux发行版和macOS社区维护者都有编译好的包。它和Oracle JDK 8在绝大多数API上完全兼容唯一的区别是少了JavaFX和一些Oracle专属的字体渲染组件。AdoptOpenJDK / Temurin / Liberica等第三方发行版这些本质上也是OpenJDK 8的编译产物但做了额外的测试、补丁和平台适配。比如Eclipse Adoptium的Temurin 8在macOS上表现就很稳而且完全免费可商用。我的建议是如果你是个人学习、平时写写Spring Boot、练练算法直接用Oracle JDK 8的dmg安装包最省事如果你是在公司环境、要给团队配统一开发环境老老实实用Temurin 8或者OpenJDK 8避免授权麻烦。还有一个非常关键的问题你的Mac是Intel芯片还是Apple Silicon芯片这个直接决定你下载哪一个安装包。M1、M2、M3芯片的Mac需要下载macOS aarch64架构的版本Intel芯片的Mac则要下载macOS x64版本。如果你把x64的包装到M系列芯片上虽然能用Rosetta转译运行但性能会有损耗而且某些原生库会直接报错。2. 三种主流安装方式对比dmg、命令行解压、Homebrew说完了选哪个版本接下来就是怎么装的问题。网上关于“JDK 1.8安装教程”的文章一抓一大把但很多都只写了其中一种方式完全没有横向对比导致读者装完也不知道自己用的到底对不对。我这几年代码生涯里把三种方式都试了个遍这里直接给你摊开讲清楚。先上一张对比表方便你一眼看出区别安装方式操作难度可控性卸载残留推荐场景dmg安装包最低双击下一步一般文件分散在系统目录容易残留新手、只要一个JDK版本手动解压配置环境变量中等需要敲命令最高路径完全自己控制干净有洁癖、需要同时管理多JDKHomebrew安装中等一条命令中等依赖brew统一管理较干净已有Homebrew环境、喜欢命令行先说dmg安装包。Oracle官方以及Temurin都提供macOS x64和macOS aarch64两种dmg包。双击打开之后里面就是一个.pkg安装器一路“继续”就完事了。装完之后它会自动帮你在/Library/Java/JavaVirtualMachines/目录下创建一个jdk1.8.0_xxx.jdk文件夹同时把java、javac等可执行文件软链到/usr/bin下。对于大多数只装一次JDK的人来说这种方式确实是最省心的。手动解压的方式则需要你自己去下载tar.gz或tar.zst压缩包解压到某个你想要的目录下然后手动配置JAVA_HOME环境变量。这种方式最大的好处是你能精确控制JDK的位置比如我习惯把所有开发工具放在/Users/你的用户名/dev/目录下想切换版本的时候只需要改一下环境变量指向非常灵活。Homebrew方式最省事只需要执行brew install --cask temurin8或者是用OpenJDK的formulabrew install openjdk8但这里有个坑Homebrew的openjdk8是keg-only的也就是说它会装到/usr/local/opt/openjdk8下面但不会自动给你链接到/usr/bin你还需要手动配置环境变量。而且Homebrew上JDK 8的版本更新不算特别及时有些补丁版本会落后官网。我个人实测下来的结论是如果你的需求就是“装一个能跑的JDK 8”dmg安装包是最合适的如果你需要频繁切换多个Java版本或者对系统目录有洁癖那手动解压是更好的选择。Homebrew则适合那种“反正是开发机怎么方便怎么来”的人。3. 实操环节从下载到配置环境变量一步步走通3.1 下载适配芯片架构的安装包假定你已经决定用dmg方式安装我们就以Temurin 8为例讲一下完整流程因为它的下载链接和授权政策比Oracle友好得多。打开Eclipse Adoptium官网也就是Adoptium的下载页面选择版本8、操作系统macOS、架构根据你的芯片选择。怎么确认芯片架构点桌面左上角苹果图标选择“关于本机”看“芯片”那一栏显示“Apple M1”或“Apple M2”等就是ARM架构显示“Intel Core i5”之类就是x86架构。对应的文件命名通常是这样的OpenJDK8U-jdk_x64_mac_hotspot_8uXXXX.tar.gzIntel芯片OpenJDK8U-jdk_aarch64_mac_hotspot_8uXXXX.tar.gzApple Silicon芯片如果你是老项目开发者需要用到Oracle JDK也可以去Oracle官网下载但需要注意Oracle的下载页面默认只展示最新版本你需要找到“Java SE 8uXXX”的归档页面才能找到旧版。Oracle官网的下载按钮通常要求你勾选“接受许可协议”才能点击而且还要登录Oracle账号这一点确实比Temurin麻烦不少。3.2 安装过程双击pkg还是命令行解压dmg安装包的方式双击打开后直接双击那个.pkg文件系统会弹出“安装器”界面一路继续即可。这个过程通常会要求你输入管理员密码因为它是往/Library/Java/JavaVirtualMachines/这个系统级目录写入文件的。安装完成之后怎么检查是否成功打开终端Terminal输入java -version正常情况下会输出类似这样的信息java version 1.8.0_392 Java(TM) SE Runtime Environment (build 1.8.0_392-b03) Java HotSpot(TM) 64-Bit Server VM (build 25.392-b03, mixed mode)注意第一行JDK 8的版本号显示的是1.8.0_xxx不是8uxxx这是Java 8独有的命名习惯本质上1.8.0_392就等于8u392。如果你看到的是openjdk version 1.8.0_392字样那说明你装的是OpenJDK系列也是正常的。如果是手动解压方式命令则是这样的# 假设你把JDK压缩包下载到了 ~/Downloads 目录 cd ~/Downloads # 创建一个统一的开发工具目录 mkdir -p ~/dev # 解压JDK到该目录 tar -zxvf OpenJDK8U-jdk_x64_mac_hotspot_8u392b08.tar.gz -C ~/dev/ # 解压后会在 ~/dev/ 下生成一个 jdk8u392-b08 之类的目录然后你就可以通过设置JAVA_HOME指向这个目录来使用它。3.3 环境变量配置macOS上的JAVA_HOME到底怎么设很多新手在这里会卡住因为在网上搜到的教程很多都是Windows的或者配置的是老式的~/.bash_profile而macOS从Catalina开始默认shell已经变成了zsh所以你要改的是~/.zshrc文件而不是~/.bash_profile。打开终端执行open -e ~/.zshrc如果提示文件不存在可以先创建touch ~/.zshrc open -e ~/.zshrc在打开的文件末尾追加以下几行export JAVA_HOME$(/usr/libexec/java_home -v 1.8) export PATH$JAVA_HOME/bin:$PATH保存关闭然后在终端执行source ~/.zshrc这里我要特别解释一下/usr/libexec/java_home这个命令它是macOS自带的一个Java路径查找工具。你执行/usr/libexec/java_home -v 1.8的时候它会自动查找系统里所有已安装的Java版本找到1.8对应的那个home目录并输出路径。这样做的好处是即使你的JDK安装路径很深或者以后系统更新变动了路径这个命令仍然能找到正确位置比直接写死路径要灵活得多。如果你走的是手动解压的方式/usr/libexec/java_home是查不到你自定义目录的JDK的此时你需要直接写死路径比如export JAVA_HOME$HOME/dev/jdk8u392-b08 export PATH$JAVA_HOME/bin:$PATH配置完之后先验证一下echo $JAVA_HOME这应该会输出你JDK的安装路径。然后再执行java -version javac -version如果两个命令都能正常输出版本信息说明你的JDK 8环境已经可以用了。3.4 多版本JDK并存时怎么优雅切换日常开发中难免会遇到这种情况手头维护的老项目需要JDK 8新项目又需要JDK 17或者21总不能在两个版本之间反复卸载重装吧macOS的/usr/libexec/java_home命令就是为此设计的。你先分别装好不同版本的JDK然后查看当前系统里有哪些版本/usr/libexec/java_home -V这个命令会列出所有已安装的JDK版本比如Matching Java Virtual Machines (3): 21.0.2 (x86_64) Oracle Corporation - Java /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home 17.0.10 (x86_64) Oracle Corporation - Java /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home 1.8.0_392 (x86_64) Oracle Corporation - Java SE 8 /Library/Java/JavaVirtualMachines/jdk1.8.0_392.jdk/Contents/Home此时你可以简单粗暴地在~/.zshrc里手动改JAVA_HOME的指向路径来切换版本。但更优雅的做法是使用jenv这个工具它能让你在项目目录下自动切换Java版本甚至按目录记忆版本。安装jenv非常简单brew install jenv然后在~/.zshrc里添加export PATH$HOME/.jenv/bin:$PATH eval $(jenv init -)重启终端之后把这些JDK版本加到jenv的管理里jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_392.jdk/Contents/Home jenv add /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home接着设置全局版本jenv global 1.8以后在某个项目目录下临时切换到其他版本jenv local 17这个local命令会在当前目录生成一个.java-version文件之后你每次进入这个目录jenv会自动把Java版本切到17。这个机制和Python的pyenv非常像用起来极其顺手。4. 验证安装是否成功不只看java -version很多教程到这里就结束了但我更建议你做一轮完整的验证因为只靠java -version这一条命令有时候会给你一种“装好了”的错觉实际上真正跑项目的时候却各种报错。第一件事是检查javac因为某些环境比如只装了JRE的机器只有java命令而没有javac这样你什么源码都编译不了。在终端执行javac -version如果输出javac 1.8.0_392说明编译工具没问题。第二件事是写一个最基础的Java文件实际跑一下编译和运行流程cd ~/Desktop cat Hello.java EOF public class Hello { public static void main(String[] args) { System.out.println(JDK 8 works fine!); } } EOF javac Hello.java java Hello看到输出JDK 8 works fine!就代表从源码到字节码再到运行的整条链路都通了。这里有一个容易踩的坑java Hello命令不要加.class后缀很多人会习惯性写成java Hello.class这会导致Error: Could not find or load main class错误。第三件事是验证IDEA或者其他IDE是否能正常识别JDK。在IntelliJ IDEA里打开File - Project Structure - SDKs点击加号添加JDK如果系统已经正确配置了/usr/libexec/java_homeIDEA一般会自动侦测到已安装的JDK。如果IDEA里只显示一个IDE自带的JBR版本说明你的JDK没有被识别到那通常是因为IDE是在你配置环境变量之前启动的重启IDE即可解决。5. 常见问题与排查技巧实录我见过太多同事和网友在macOS上装JDK 8的时候翻车这里把它们整理成问题速查表再额外分享一些网上教程不太会写到的排查细节。现象可能原因解决方案安装时提示“无法打开因为它来自身份不明的开发者”macOS Gatekeeper拦截系统设置-隐私与安全性-仍要打开或右键-打开java命令提示“command not found”环境变量没配置或配置错误检查~/.zshrc中的JAVA_HOME和PATH执行sourcejava -version显示的是11或17系统默认版本指向了其他JDK执行/usr/libexec/java_home -V查看手动设置JAVA_HOME报错“Unsupported class file major version”编译用的JDK版本高于运行环境确认项目编译级别设为1.8检查maven/gradle配置的source/targetM1芯片安装x64版本的JDK下载错架构包卸载后下载aarch64版本重装运行某些JavaFX程序报错Oracle JDK 8自带JavaFXOpenJDK 8没有换Oracle JDK 8或单独引入OpenFX依赖第一个“来自身份不明的开发者”问题在macOS上最常出现。原因是Oracle JDK历史版本的安装包已经没有Apple Developer签名认证了或者签名链在系统更新后失配。解决办法是在访达里找到安装包按住Control键单击选择“打开”然后在弹出的对话框里点击“打开”如果还不行就在终端里用xattr -dr com.apple.quarantine清除隔离标记。但这里要注意这个命令是把整个目录的隔离属性全部移除只对你自己完全信任的安装包使用别乱对下载目录里的所有文件用。第二个高频问题是真的有人在~/.bash_profile里配了半天再到终端里执行发现怎么都不生效。原因很简单你的macOS默认shell是zsh它不读~/.bash_profile。你需要把配置写到~/.zshrc里。还有一种玄学情况是你配置的是~/.zprofile这个文件在登录时才会加载终端里的非登录shell不会读它所以修改之后怎么source都没用。第三个问题的场景是你装了JDK 8但是执行java -version看到的是版本17或21。这是因为macOS系统自带的java软链指向的往往是最新版本的JDK或者你的shell配置里PATH顺序有问题。执行which java看看指向的路径如果是/usr/bin/java用/usr/libexec/java_home -V看它是哪个版本然后修改你的JAVA_HOME环境变量即可。如果which java显示的是/usr/local/bin/java或者Homebrew的路径多半是你之前装过其他JDK残留的符号链接没有被清理干净。第四个“Unsupported class file major version”问题常见于你在IDEA里编译的时候用了JDK 21的编译器却把项目语言级别调成8然后运行时的JRE是JDK 8导致字节码版本不兼容。这个错误信息本身并不难理解难的是很多人不知道major version 65对应的是JDK 21major version 52对应JDK 8。这里给你一个速查表字节码major version对应JDK版本52JDK 855JDK 1161JDK 1765JDK 21排查思路就是编译你那个.class文件的javac版本一定要小于等于运行它的java版本否则就会报这个错。6. 顺手把IDEA和Maven也安排明白只装了JDKIDE和构建工具配置不对一样跑不起来。很多初学者在这里把时间浪费在翻论坛上我这里直接给你捋清楚。IntelliJ IDEA本身是自带一个JBRJetBrains Runtime的也就是说你双击IDEA图标能启动不代表你项目就能编译。你要在项目里用JDK 8需要做两件事第一在Project Structure的Project选项卡里把SDK设置为1.8Language level设置为8第二在Settings - Build, Execution, Deployment - Build Tools - Maven - Importing里把JDK for importer也设置为1.8。如果你的项目是Gradle那就去Gradle - Gradle JVM里切换。这里有个坑IDEA设置好SDK之后如果Maven项目引入了很多依赖编译时可能会报“找不到javax.xml.bind的包”。这不是环境问题而是JDK 9之后Java EE相关的模块被移除了JDK 8时代不需要额外的javax.xml.bind依赖。可你的项目明明用的JDK 8怎么会报这个错呢通常是因为Maven的Java版本配置没有真正传递给Maven编译器插件你需要检查pom.xml里的maven.compiler.source和maven.compiler.target是不是8。如果是Maven环境直接在~/.zshrc里配置export JAVA_HOME$(/usr/libexec/java_home -v 1.8) export PATH$JAVA_HOME/bin:$PATHMaven依赖JAVA_HOME去定位JDK你只要保证在终端里执行mvn -version时输出的JAVA_HOME指向的是JDK 8路径即可。如果你装了jenv切好版本之后mvn -version里的JAVA_HOME会不会同步切换答案是会前提是你在~/.zshrc里对jenv进行了正确的初始化。7. 最后再分享一个小技巧卸载残留处理很多人装完发现版本不对或者装错了想卸掉重来但如果没有卸干净再装的时候可能出现各种诡异问题。dmg安装的JDK直接删目录就能完成大部分卸载sudo rm -rf /Library/Java/JavaVirtualMachines/jdk1.8.0_392.jdk然后还要检查一下是否有相关的符号链接残留在/usr/bin下ls -l /usr/bin/java如果看到指向的路径已经不存在了就可以移除它sudo rm -f /usr/bin/java /usr/bin/javac如果你用Homebrew安装过还要把它一并卸掉brew uninstall --cask temurin8 # 或者 brew uninstall openjdk8我自己在清理环境的时候习惯用一个更彻底的方式装完JDK之后在/Library/Java/JavaVirtualMachines/目录下看一眼把里面所有不用的JDK目录全部挪到一个备份目录里只在需要的时候才放回去。这样既不会因为删错导致系统出问题又能保持环境干净。根据我这几年在各个团队里帮人排查环境的经验macOS装JDK 8本身并不难真正的坑往往藏在“下载了错误的芯片架构包”、“改了错误的shell配置文件”、“多个JDK版本PATH冲突”这三件事上。只要你把这几个关键点都弄清楚一次搞定不是问题。最后提醒一句无论你选Oracle还是OpenJDK系列的发行版都记得多看两眼自己的使用场景是否在授权允许范围内尤其是团队协作和商用环境这点比装本身的快慢更重要。
阅读完成 · 觉得有帮助?
咨询建站