当前文章以 Java 为例,但是编程语言在环境变量上的知识大同小异,思想是相同的。
在终端输入的命令行对应着应用程序,如果不是系统自带的命令,那么系统需要环境变量来定位应用程序所在的文件路径。
一个语句中可以同时附上多个环境变量:
;
分割;
:
分割;
PATH 用于指定可执行的二进制文件的位置。例如:我们添加了 JDK 或者 JRE 的目录,这样我们就可以直接使用这些目录下的命令却不需要指定这些命令的绝对路径;
关于 PATH 是这样的,每次添加一个编程语言的二进制文件都需要在原来的 PATH 上补上这个路径。设置方式如下:
export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin #系统默认的路径
export PATH=$JAVA_HOME/bin:$PATH #添加 Java 的二进制文件目录
export PATH=$PATH:/usr/local/mysql/bin #添加 MySQL 的二进制文件目录
export PATH="/Library/apache-maven-3.6.3:$PATH" #添加 Maven 的二进制文件目录
export PATH="/Library/apache-maven-3.6.3/bin:$PATH"
export PATH=$PATH:$GOBIN #添加 Go 的二进制文件目录
JAVA_HOME 类似于 Linux 中的 /home/
目录,Linux 的 home 目录用于存储用户数据目录的最顶级目录,而环境变量中的“用户”则是各种编程语言,JAVA_HOME 是 Java 编程语言 JDK 的顶级目录;
JAVA_HOME 的作用有:
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home
PATH=$JAVA_HOME/bin:$PATH
cd
命令快速加载到 JAVA_HOME 目录:
cd $JAVA_HOME
直接加载到对应设置的目录下
CLASSPATH 具有双重含义:
虽然很多关于如何配置 JDK 的文章让我们在环境变量中配置 CLASSPATH,但是事实上我们不需要配置这个参数。第一个原因是在 JAVA_HOME 中的相关 jar 文件并不需要 CLASSPATH,而很多文章中只是做了 JDK 自带架包的配置,除非我们将所有第三方架包都放置于 JAVA_HOME 中。但是,出于效率和分包管理的缘由,把第三方架包放置于 JAVA_HOME 中并不是个好主意。第二个原因是第三方架包位于哪个目录下可以通过 Java 命令的-classpath
选项来指定本次 java 文件或者 class 文件,会涉及到的 jar 和 class 文件目录。
使用方式是将第三方 jar 和 class 文件目录以及待被处理的 java 或 class 文件的目录都放于 -classpath
选项后,多个目录在 Windows 中使用 ;
隔开,在 MacOS 中使用 :
隔开。且classpath 默认且必须含有当前目录 .
,java
和 javac
等命令会在当前目录中寻找相关 java 文件以及 class 文件。例子如下:
/Library/TestJavaSource
目录下,类名为 xyz.jiangweijia.HelloPath.java
;/Library/ThirdPartProduction
目录下,包名为com.spring
;那么命令应当如下:
java -classpath /Library/TestJavaSource:/Library/ThirdPartProduction xyz.jiangweijia.HelloPath.java
注意事项:
xyz/jiangweijia
,所以你在 CLASSPATH 中无需细节到 xyz
这一层目录,仅仅需要包名对应目录的上层目录。- classpath
选项可以使用缩写版本代替 -cp
;Mac 上配置环境变量的方式是:
vim ~/.bash_profile
打开并使用 export
语句配置环境变量;source ~/.bash_profile
使环境变量生效;.bash_profile
注释的格式是 #
;这是我本地 Mac 的环境变量配置:
export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
#Java
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
# mysql
export PATH=$PATH:/usr/local/mysql/bin
#快速启动、结束MySQL服务, 可以使用alias命令
alias mysqlstart='sudo /usr/local/mysql/support-files/mysql.server start'
alias mysqlstop='sudo /usr/local/mysql/support-files/mysql.server stop'
#Maven
export PATH="/Library/apache-maven-3.6.3:$PATH"
export PATH="/Library/apache-maven-3.6.3/bin:$PATH"
#Go
export GOROOT=/usr/local/go
export GOPATH=/Users/ruby/go
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
export
命令用于修改环境变量;alias
命令用于设置指令的别名,对一些较长的命令进行简化。使用 alias
时,必须使用单引号将原来的命令包含,防止特殊字符导致错误。格式是:alias 别名='原命令 -选项/参数'
,例如:alias ll='ls -lt'
;它们之间在作用域上有着显著的区别:
我们使用vim ~/.bash_profile
命令进行环境变量的配置,其意义是:编辑当前 SHELL 对应的用户级环境变量配置文件,如 bash 对应的 .bash_profile。
对于 Mac 系统而言,它们对应的配置文件也不同:
/etc/profile
和 /etc/bashrc
~/.bash_profile
(Bourne Shell)和 ~/.zshrc
(zsh); 注意我们可以设置一个临时环境变量,其方式是命令行而不是配置文件中使用 export
命令,其格式和配置文件中的没有区别。