关于环境变量的理解,maven有没有必要配置MAVEN_HOME或M2_HOME,tomcat一定要设置JAVA_HOME环境变量吗
前言本文讨论关于环境变量的理解,maven有没有必要配置MAVEN_HOME或M2_HOME,tomcat一定要设置JAVA_HOME环境变量吗关于环境变量我们知道配置环境变量后,访问命令可以省略一长串的路径,直接通过 “短名” 即可。例如在Windows平台安装了JDK我们会配置一下JAVA_HOME变量,然后再把 %JAVA_HOME%\bin 配置在Path里,这样在访问 java.e...
前言
本文讨论关于环境变量的理解,maven有没有必要配置MAVEN_HOME或M2_HOME,tomcat一定要设置JAVA_HOME环境变量吗
关于环境变量
我们知道配置环境变量后,访问命令可以省略一长串的路径,直接通过 “短名” 即可。例如在Windows平台安装了JDK我们会配置一下JAVA_HOME变量,然后再把 %JAVA_HOME%\bin
配置在Path里,这样在访问 java.exe
的时候就不需要指定全路径,在任何地方都可以访问 java
(扩展名可省略)
Mac跟Windows的环境变量是一样的道理,也是为了在任何地方可以访问。
但是,我们是不是有个疑问,环境变量的变量名(例如这里的JAVA_HOME
)是可以随便乱取的吗? 答案是不确定的。
因为就像Windows里定义的TEMP
和TMP
变量,难道不是一种约定吗? 比如我开发一个PC软件,如果要写临时文件,我只要获取 %TEMP%
或 %TMP%
即可得到这两个变量代表的路径进而写入临时文件。如果不是约定,那千千万万的开发者各自写一个路径,是不是很乱?
既然环境变量
名不能随便起名,回到刚刚的问题,这就是为什么变量叫 JAVA_HOME 而不是其他名字(如 JDK_HOME、JVM_HOME)。 这就是一种约定。
已知的一些软件,比如maven、tocmat等的启动脚本都会从约定的名字JAVA_HOME中尝试获取命令。当然maven和tomcat做了兼容,即使获取不了JAVA_HOME,只要能执行java,也不会爆错,但是保不齐某些软件的脚本不做兼容,所以环境变量名还是不能随便取)
maven 的环境变量
下面以maven3.6.1为例(其他版本应该差不多)
网上的教程可能比较乱。有说MAVEN_HOME
的,有说M2_HOME
的,配置该变量后再引用定义的变量到path里。据说 MAVEN_HOME 是maven1的时候的配置,M2_HOME是maven2以上的版本的配置(包括现在的maven3也是配M2_HOME,注意不是M3_HOME!!)
不过官方的教程是对配置M2_HOME只字未提。
参考这里
注意:
官方的意思就是不用配置任何环境变量,不用配MAVEN_HOME或M2_HOME,直接引入到Path里即可(无论是Windows还是Mac都不需要!),直接配置在Path里(Windows)或export /xxx/yyy/bin:$PATH
(Mac),其中 /xxx/yyy/bin
是maven的bin目录
- 但是Windows平台必须配置JAVA_HOME,Mac不需要
- PS:maven干嘛需要jdk?需要打包所以需要编译!即使是jre都不行!必须jdk
JDK的环境变量
我们一样怀疑,有没有必要配置JAVA_HOME环境变量?
对于maven
以maven3.6.1为例(其他版本应该差不多)
- Windows平台:是有必要的,只要maven的mvn.cmd里引用了名为JAVA_HOME的变量,找不到就会报错。他并不会从where java中获取路径!!!
- Mac平台:不需要配置JAVA_HOME,看maven的mvn里的脚本就知道它找不到JAVA_HOME环境变量的时候会通过
which java
命令来找到。而刚好Mac在安装JDK的时候就会把可执行命令拷贝到直接能访问的路径下,所以Mac平台不配置JAVA_HOME,其maven也是可以跑的
对于tomcat
以tomcat9.0.26为例(其他版本应该也差不多)
PS: 跟maven不一样,tomcat运行部需要编译,所以也可以是jre,当然jdk也是可以的(jdk包含jre)
- Windows平台:是有必要的,否则启动一闪就关闭了(启动的脚本startup.bat中有对catalina.bat的调用,catalina.bat的脚本中有JAVA_HOME的引用(可以看到细节,如果JAVA_HOME没配置,可以使用JRE_HOME,并且同时配置的时候优先使用JRE_HOME)
- Mac平台:可以不配置JAVA_HOME,看startup.sh会调用catalina.sh,catalina.sh中会调用setclasspath.sh获取到运行需要的JAVA_HOME或JRE_HOME,由于mac系统执行
/usr/libexec/java_home
就能够获取安装的jdk的路径,所以便取到了值。
从打印的启动日志可以看出,不配置JAVA_HOME默认使用JRE_HOME
Stone-MacBookPro15:bin stonewang$ ./startup.sh
Using CATALINA_BASE: /Users/stonewang/dev/tomcats/apache-tomcat-9.0.26
Using CATALINA_HOME: /Users/stonewang/dev/tomcats/apache-tomcat-9.0.26
Using CATALINA_TMPDIR: /Users/stonewang/dev/tomcats/apache-tomcat-9.0.26/temp
Using JRE_HOME: /Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home
Using CLASSPATH: /Users/stonewang/dev/tomcats/apache-tomcat-9.0.26/bin/bootstrap.jar:/Users/stonewang/dev/tomcats/apache-tomcat-9.0.26/bin/tomcat-juli.jar
Tomcat started.
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)