这个是已经配置完成的环境变量截图
操作环境:linux
一. java配置环境变量
为什么要设置环境变量?原因很简单:首先,java文件要通过javac命令编译生成.class文件,这个编译的命令在java的jdk里面,想要执行它就必须知道它的存放路径。第二,java文件执行的是编译后的.class文件,因此必须知道编译后的.class文件放在了什么地方。(执行用的是java命令,他和javac同在jdk里面)。基于上面的两个需要就必须配置环境变量。下面详细说明:JAVA_HOME、PATH、CLASSPATH。(先概述再详解)
1. JAVA_HOME:它指向jdk的安装目录,Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk。
2. PATH:作用是指定命令搜索路径,在shell下面执行命令时它会到PATH变量所指定的路径中查找是否能找到相应的命令程序。我们需要把 jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等等,设置好 PATH变量后,就可以在任何目录下执行javac/java等工具了。
3. CLASSPATH:作用是指定类搜索路径,要使用已经编写好的类,前提是能够找到它们,JVM(java虚拟机)就是通过CLASSPTH来寻找类的。我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。
注1:系统变量PATH是针对整个操作系统的,CLASSPATH是针对专门java的
注2:所谓的JVM就好像是在操作系统上面再激活另外一个操作系统,对JVM来说CLASSPATH就好像是对操作系统来说的PATH,所以要用jvm开运行程序就需要设定classpath。
注3:CLASSPATH里面该不该加rt.jar ,dt.jar ,tool.jar呢?
答:rt.jar是不需要的,jdk会自动加载。tools.jar和dt.jar为类库路径。如果不用Swing里面的东西,可以不加dt.jar。 tools.jar里面是最基本的工具类,比如javac,不加是无法做开发的。
下面看一下服务器上/etc/profile中设置的java环境变量
A.linux下用冒号“:”来分隔路径
B . export PATH中$PATH / $JAVA_HOME/$CATALINA_HOME 是用来引用原来的环境变量的值
C . CLASSPATH中当前目录“.”不能丢
二.Tomcat是否配置环境变量(根据需要,个人觉得配不配置均可)
(以20服务器上的/data/workspace_dubbo/tools/tomcat-rcservice为例,讨论如何启动tomcat)
01. 不配置环境变量
切换至/data/workspace_dubbo/tools/tomcatdubbo-tcservice/bin目录下执行./catalina.sh run命令即可(在其他目录下也可以,指出catalina.sh的位置即可)
02. 配置环境变量(在/etc/profile中配置)
在/etc/profile中配置了tomcat环境变量后,可以在任意目录下执行catalina.shrun命令,无需指出catalina.sh的位置,因为环境变量中已配置。个人觉得配置环境变量这种方式比较适用于当前服务器上只有一个tomca的情况。(若有多个tomcat,配置一个即可,其他不用配置)
Q1:为什么01情况下输入的命令是./catalina.sh run,02情况下输入的命令是catalina.sh run?(.代表当前目录,..代表上一级目录)
答:01是未设置环境变量的情况,启动tomcat时必须告诉系统catalina.sh命令的位置,否则会系统找不到。切换至tomcatdubbo-tcservice/bin目录下启动tomcat,【./catalina.sh run】该命令中的./即是告诉系统catalina.sh的位置。也可以在任意目录下启动tomcat,同样也要告诉系统catalina.sh的位置
02是设置环境变量的情况,在任意目录下都可运行catalina.sh
Q2:/的作用
答:/ 为路径分隔符,
/ 这个符号在最前面代表根目录的含义。比如 /boot,表示根目录下的boot目录,在后面则是目录间的分隔符
注1:export命令
功能说明:设置或显示环境变量。
语法:export [-fnp][变量名称]=[变量设置值]
补充说明:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该次登录操作。
参数:
-f 代表[变量名称]中为函数名称。
-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p 列出所有的shell赋予程序的环境变量。
export设置只对当前的bash登录session有效。可以把export命令放在 /etc/profile 里面,登录后会执行该文件里面的命令,对所有用户都有效。
Q3:为什么在/etc/profile中设置了tomcat环境变量,保存后在任意目录执行catalina.sh run会提示
答:在/etc/profile中修改了环境变量不会立即生效:登录linux时会加载/etc/profile,登录之后再修改这个文件不会再加载了。要想让环境变量生效要么重新登录要么source一下使它立即生效。
Q4:TOMCAT_HOME和CATALINA_HOME
答:按照以前设置的环境变量来看,JAVA_HOME表示JDK的安装目录,那么应该用TOMCAT_HOME来表示Tomcat的安装目录,可为什么要使用CATALINA_HOME呢?实际上,在Tomcat 4以前,用的就是TOMCAT_HOME来表示Tomcat的安装目录,在Tomcat 4以后,采用了新的Servlet容器Catalina,所以环境变量的名字也改为了CATALINA_HOME。
Q5:环境变量区分大小写吗?
答:linux和windows下都不区分大小写,已在linux下验证
注2:source命令
修改了/etc/profile文件,想让它立刻生效,而不用重新登录,这时就想到用source命令,如:source /etc/profile
source命令:
source命令也称为“点命令”,也就是一个点符号(.),是bash的内部命令。
功能:使Shell读入指定的Shell程序文件并依次执行文件中的所有语句
source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。
用法:source filename 或 . filename
source filename 与 sh filename 及./filename执行脚本的区别在那里呢?
1.当shell脚本具有可执行权限时,用sh filename与./filename执行脚本是没有区别的。./filename是因为当前目录没有在PATH中,所有"."是用来表示当前目录的(同./catalina.sh run一样,若没有设置环境变量,一定要告诉系统它的位置)。
2.sh filename 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export。
3.source filename:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。脚本里面所有新建、改变变量的语句都会保存在当前shell里面。
三.Maven配置环境变量
以20服务器上/data/workspace_dubbo/tools/maven为例,若不配置环境变量,每次执行maven命令时都必须把该命令的路径带出来
为了方便操作,在/etc/profile中配置maven的环境变量