日常办公和软件开发除了可以使用Windows系统以外,还可以使用macOS系统,至于具体使用什么系统取决于你入职公司之后公司给你发的什么电脑,如果是MacBookPro那么就使用macOS开发项目,因此现在我们开始在macOS系统下搭建Java8的开发环境,如果你的Mac电脑使用的Apple CPU(例如M1,M1 Pro,M1 Ultra,M2),那么按照如下方法下载、安装和配置Java8开发环境。
早期Mac电脑都是使用Intel 的CPU,在2020年以后苹果公司在ARM架构的基础上自研CPU,例如M1,M1 Pro,M1 Ultra,M2等等,因此苹果公司的Mac电脑有 Intel x86架构和ARM 架构两种不同的CPU架构
那么问题来了,我怎么知道我使用的Mac电脑CPU架构呢?
在macOS Ventura 点击左上角的苹果菜单,然后选择关于本机
在弹出的窗口中看到芯片是Apple开头的 ,例如Apple M1 Pro,Apple M1 Max,Apple M1 Ultra,Apple M2,等等就是属于ARM架构
在macOS Montery 点击左上角的苹果菜单,然后选择关于本机
在弹出的概览窗口中看到处理器包含Intel,例如2.3 GHz 八核 Intel Core i9 就是属于Intel x86架构
正是有这两种不同的CPU架构,直接导致基于Intel x86架构开发的程序(例如金山文档、恒星播放器、cleanmymac)是无法直接运行在基于ARM架构的CPU(例如M1,M1 Pro,M1 Max,M1 Ultra ,M2)上
苹果公司提供了一个翻译工具-Rosetta 2,通过 Rosetta 2,搭载 Apple 芯片的 Mac 可以使用专为配备 Intel 处理器的 Mac 构建的 App,这样也就意味着以前为Intel CPU开发的程序可以通过Rosetta 2 运行在苹果芯片的Mac电脑上,例如金山文档、恒星播放器等等。
Rosetta 2 仅适用于搭载 Apple 芯片的 Mac 电脑。
首次打开需要 Rosetta 的 App 时,系统会要求您安装 Rosetta。点按“安装”,然后输入您的用户名和密码以允许继续安装。
如果您点按“以后”,则下次打开需要 Rosetta 的 App 时,系统会再次要求您安装 Rosetta。
如果 Rosetta 已经安装,则系统不会再次要求您安装,也就是仅仅需要安装一次。
您不需要打开 Rosetta 或与这个 App 互动。每当您使用专为搭载 Intel 处理器的 Mac 电脑构建的 App 时,Rosetta 都会在后台自动运行。Rosetta 会转换相应 App,使它可以与 Apple 芯片搭配使用。
对于需要 Rosetta 的 App,在大多数情况下,您不会察觉它的性能有任何不同。不过,您应该联系 App 开发者,以询问相应 App 有没有一个版本能够以原生方式来充分利用 Apple 芯片的功能和性能。
要识别需要 Rosetta 或者可以使用 Rosetta 的 App,请按照以下步骤操作:
在“访达”中选择一个 App。
从菜单栏的“文件”菜单中,选取“显示简介”。
查看标有“种类”字样的信息:
应用程序 (Intel) 表示 App 仅支持 Intel 处理器,并且需要 Rosetta 才能在搭载 Apple 芯片的 Mac 上运行。例如金山文档、恒星播放器
应用程序(通用)表示 App 既支持 Apple 芯片也支持 Intel 处理器,并且在默认情况下使用 Apple 芯片。通用 App 不需要 Rosetta。
对于标有“应用程序(通用)”的 App,“简介”窗口包含“使用 Rosetta 打开”这项设置。通过这项设置,网页浏览器等通用 App 可以使用还没有更新为支持 Apple 芯片的插件、扩展或其他附加组件。如果某个通用 App 无法识别您为这个 App 安装的附加组件,您可以退出这个 App,选择这项设置,然后再试一次。
应用程序(Apple芯片) 表示App是专门针对Apple芯片开发的,例如例如M1,M1 Pro,M1 Max,M1 Ultra ,M2)等等
跳转到Download Azul Zulu Builds of OpenJDK
点击关闭按钮可以完成安装,然后会提示 你要将Azul Zulu JDK 8.66.0.15 安装器移除到废纸篓吗?这里建议保留,因为后期可能会因为某些原因重装
当基于ARM架构 macOS版Java8安装完成以后,你会发现即使没有配置JAVA_HOME环境变量,在终端上运行mvn --version时也不会像Windows那样提示需要配置JAVA_HOME
而且即使没有配置PATH环境变量,在终端的任意路径下也可以运行javac -version和java -version,这样就意味着在终端的任意路径下使用javac和java
这样是不是意味着不用配置Java8的JAVA_HOME和PATH环境变量呢?
其实不然,因为后期我们会使用多个不同版本的Java,例如在开发Java项目时使用的Java8,而学习Java语言时为了使用高版本的新特性可能会使用Java11甚至Java17,这里就会有在终端上切换Java版本的需求,因此我们依然要配置Java8的JAVA_HOME和PATH环境变量
JAVA_HOME其实指的就是Java的家目录,默认情况下Java8家目录的路径是/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
配置JAVA_HOME环境变量的目的就是为了给Java8的PATH环境变量使用的
不过我使用的是第三方终端iTerm,需要自己手动安装,可以使用Command+空格打开聚焦搜索,然后搜索iTerm回车后打开
查看系统所使用的Shell类型
不同类型的Shell所使用的配置文件不同,例如zsh使用的.zshrc,而bash使用的.bash_profile
使用echo $SHELL 命令可以查看当前使用的Shell类型,这里默认使用的是zsh
如果想要使用bash,那么可以使用chsh -s /bin/bash命令切换到bash,不过切换以后需要重新开启新的窗口,然后使用echo $SHELL查看Shell类型
创建配置文件
如果你是使用的bash ,那么在用户的家目录下使用touch .bash_profile 创建.bash_profile文件
如果你是使用的zsh,那么在用户的家目录下使用touch .zshrc创建.zshrc文件
Mac的家目录就是/Users/liuguanglei,其中liuguanglei表示用户名,每个系统的用户名可能不相同。打开终端以后默认的路径就是在家目录下
我这里使用默认的shell是zsh,因此创建.zshrc文件
然后添加如下配置
#配置Java8的JAVA_HOME
export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
验证配置
在终端上输入echo $JAVA_HOME 命令看能否输出Java8家目录的路径/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
PATH环境变量的本质就是一系列的路径,例如/bin,/usr/bin,/usr/local/bin,多个路径之间使用冒号(:)隔开,Mac下可以在终端上使用echo $PATH命令查看当前系统的PATH环境变量
PATH环境变量的作用就是在终端上执行命令时,系统会从PATH环境变量的路径查找命令对应的可执行程序,然后执行该程序
例如date 可以查看系统日期,而 where date 可以查看到date命令的路径,正因为/bin在PATH环境变量中,因此在终端输入date实际是运行的是/bin目录下的date程序
如果输入一个不存在的命令,那么系统会提示command not found
不过我使用的是第三方终端iTerm,需要自己手动安装,可以使用Command+空格打开聚焦搜索,然后搜索iTerm回车后打开
打开文件后可以查看到Java8的JAVA_HOME环境变量配置
然后在文件末尾添加如下内容
#配置Java8的PATH环境变量
export PATH=$PATH:$JAVA_HOME/bin
未来的某个时间可能你不再需要使用Java8时,就可以将其卸载,卸载Java8时需要删除Java8的安装目录和配置文件(例如.zshrc)
/Library/Java/JavaVirtualMachines/zulu-8.jdk # Java8的安装目录
删除Java8的安装目录时需要使用sudo rm -rf 命令来完成,首次执行sudo rm -rf前需要输入用户的开机密码
sudo rm -rf /Library/Java/JavaVirtualMachines/zulu-8.jdk
然后删除配置文件,例如.zshrc,此时使用rm .zshrc命令删除即可
删除.zshrc文件后重新开个终端窗口来验证JAVA_HOME和PATH环境变量是否已经删除
最后在终端上输入javac -version 和java -version,如果提示The operation couldn’t be completed. Unable to locate a Java Runtime. 表示删除成功