這個是已經配置完成的環境變數截圖
作業環境: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的環境變數