前言(废话)

本来打算在公司偷偷摸摸给星球的用户写一篇编程喵整合 MongoDB 的文章,结果在通过 brew 安装 MongoDB 的时候竟然报错了。原因很简单,公司这台 Mac 上的 homebrew 环境没有配置好。刚好 Java 程序员进阶之路上缺少这样一篇内容。

所以我就想,不如趁机水一篇吧,啊,不不不,趁机给小伙伴们普及一下 Homebrew 吧!瞧我这该死的大公无私的心(手动狗头)。

不会吧?不会还有人用 macOS 没有安装/配置 Homebrew 吧?

Homebrew 能干什么

Homebrew 的 Slogan :The missing package manager for macOS (or Linux)

Homebrew 这款命令行软件管理神器在 GitHub 上已经有 32.5k+ 的 star 了,功能也真心强大,几乎 macOS 上的软件包它都包了。Homebrew 本身没有问题,问题在于。。。。。不说了,你懂的。

Homebrew 除了是 macOS 的包管理器也可以装在 Linux 上成为 Linux 的包管理器,仅需要执行相应的命令,就能下载安装需要的软件包,省去了下载、解压、拖拽等繁琐的步骤。

用 Homebrew 官方的话来总结就是:安装 Apple(或 Linux 系统)没有预装但你需要的软件。比如说安装 MongoDB,只需要执行以下命令就可以安装,前提条件是环境一定要配置好。

brew install mongodb

简单一条命令,就可以实现包管理,还不用担心依赖/文件路径等问题。

Homebrew 主要由四个部分组成: brew、homebrew-core 、homebrew-cask、homebrew-bottles。

  • brew:Homebrew 的源代码仓库
  • homebrew-core:Homebrew 的核心源
  • homebrew-cask:提供 macOS 应用和大型二进制文件的安装
  • homebrew-bottles:预编译二进制软件包

再来了解一下 Homebrew 的接个核心概念,后续会经常用到。

  • formula(e),安装包的描述文件,带 e 为复数
  • cellar,包安装好后所在的目录
  • bottle,预先编译好的包,不需要再下载源码编译,速度会快很多,官方库中的包大多数是通过 bottle 方式安装的
  • tap,下载源
  • cask(s),安装 macOS native 应用的扩展,可以理解为有图形化界面的应用,带 s 为复数
  • bundle,描述 Homebrew 依赖的扩展

安装配置 Homebrew

世上无难事,只要找到 Homebrew 的正确安装方式。

按理说,Homebrew 的安装方式非常简单,只需要执行官方的一句命令就可以完成安装了。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

但国内开发者命苦就苦在,经常会因为网络的原因安装失败。原因我只能说这是 https://raw.githubusercontent.com 网站的锅,谁让它访问不稳定呢?

怎么办呢?

必须换一种高效且科学的安装方式,那就是使用镜像安装。 Gitee 上有开源作者提供了一键安装包,只需要执行以下命令就可以了。

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

安装脚本里提供了中科大、清华大学、北京外国语大学、腾讯、阿里巴巴等下载源。

但过来人告诉你,别选其他镜像源,就选中科大,速度杠杠的,40-50M/s,这速度比其他镜像源快多了,对比起来,其他就是蜗牛。

这个安装脚本非常的智能,几乎可以一件帮我们搞定所有问题。

再次感谢 Gitee 上这位大牛,已经 3k star 了,我把地址贴出来:

https://gitee.com/cunkai/HomebrewCN

brew 本体安装成功后,会提示我们配置国内镜像源。

nice,安装完成了。执行下面这几个命令体验下。

  • brew ls 查看本地命令;
  • brew search mongodb 查找软件;
  • brew -v 查看版本;
  • brew update 更新版本;
  • brew install --cask firefox 安装图形化界面软件
  • brew config 查看配置。

brew 和 brew cask 的区别

这里顺带说一下 brew 和 brew cask 的区别,这也是一开始我使用 brew 时困惑的一个点。

以前的版本中,是可以直接 brew cask list 这样执行命令的,现在改成了 brew list --cask

brew 是从下载源码开始,然后编译(不一定,有些有现成的 bottle)解压,通过 ./configure && make install 进行安装,同时会包含相关的依赖库。环境变量也是自动配置的。

brew cask 是下载解压已经编译好了的软件包(.dmg/.pkg),放在统一的目录中,省去了手动去下载、解压、拖拽等蛋疼步骤。

通过 brew search google 我们也可以看得出两者之间的区别。

  • 「Formulae」一般是那些命令行工具、开发库、字体、插件等不含 GUI 界面的软件。
  • 「Cask」就会包含一些 GUI 图形化界面的软件,如 Google Chrome、FireFox 、Atom 等

使用 Homebrew

Homebrew安装配置完成后,我们来实操体验两把。

这里是 homebrew 常用命令的一个清单,可供参考。

命令描述
brew update更新 Homebrew
brew search package搜索软件包
brew install package安装软件包
brew uninstall package卸载软件包
brew upgrade升级所有软件包
brew upgrade package升级指定软件包
brew list列出已安装的软件包列表
brew services command package管理 brew 安装软件包
brew services list列出 brew 管理运行的服务
brew info package查看软件包信息
brew deps package列出软件包的依赖关系
brew help查看帮助
brew cleanup清除过时软件包
brew link package创建软件包符号链接
brew unlink package取消软件包符号链接
brew doctor检查系统是否存在问题
brew tap [user/repo]将开源仓库添加到源

第一把,使用 Homebrew 安装 JDK

作为一名 Java 后端程序员,JDK 是必须要安装的,对吧?

1)执行 brew search jdk 查找有哪些可供安装的 JDK

2)执行 brew install openjdk@17 安装 JDK。

3)但我们在 macOS 上安装了多个版本的 JDK 后,怎么管理它们呢?可以安装一下 jEnv,一个帮助我们管理 JAVA_HOME 的命令行工具,在 GitHub 上已经收获 4.3k 的 star。

GitHub 地址:https://github.com/jenv/jenv

官方文档也非常的简洁大方:

https://www.jenv.be/

安装:

brew install jenv

配置:

echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrcecho 'eval "$(jenv init -)"' >> ~/.zshrc

添加:

jenv add /usr/local/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home/

JDK 的安装路径可以通过下图的位置查找。

管理:

jenv versionsjenv global 17.0.3

是不是贼方便?再也不用整这 echo 'export PATH="/usr/local/opt/openjdk@17/bin:$PATH"' >> ~/.zshrc 玩意了!爽,实在是爽!

第二把,使用 Homebrew 安装 MongoDB

先看 MongoDB 的官方文档(当前 release 版本是 5.0,我这里就先用上一个稳定版 4.4):

https://www.mongodb.com/docs/v4.4/tutorial/install-mongodb-on-os-x/

1)拉取 MongoDB 的源

brew tap mongodb/brew

2)更新 brew

brew update

3)安装 MongoDB

brew install mongodb-community@4.4

OK,安装成功。

小结

通过 Homebrew 下载的软件基本上来自于官网,所以大可以放心。而且而且它尽可能地利用了系统自带的各种库,使得软件包的编译时间大大缩短,基本上不会造成冗余。

这里顺带给大家提一则小故事,教别人学算法的大佬可以拿走了:homebrew 的作者去面 Google,被考算法题: 反转二叉树,结果没通过被拒了,

好了好了,今天这篇文章就先水到这吧,我们下期见~


没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟

本文已收录到 GitHub 上星标 2.8k+ 的开源专栏《Java 程序员进阶之路》,据说每一个优秀的 Java 程序员都喜欢她,风趣幽默、通俗易懂。内容包括 Java 基础、Java 并发编程、Java 虚拟机、Java 企业级开发(Git、Nginx、Maven、Intellij IDEA、Spring、Spring Boot、Redis、MySql 等等)、Java 面试等核心知识点。学 Java,就认准 Java 程序员进阶之路

https://github.com/itwanger/toBeBetterJavaer

star 了这个仓库就等于你拥有了成为了一名优秀 Java 工程师的潜力。