1. 程式人生 > >Question20180106 Java環境變量的配置及為什麽要配置環境變量

Question20180106 Java環境變量的配置及為什麽要配置環境變量

system32 lin 安裝目錄 方式 for 不同 包括 new batch

Question 1 Java環境變量的配置及為什麽要配置環境變量

Q1.1為什麽要配置環境變量

  在學習JAVA的過程中,涉及到多個環境變量(environment variable)的概念,如PATH。正確地配置這些環境變量,是能夠順利學習、開發的前提。而經常出現的問題是:我們能夠按照提示一步一步地正確配置,但時間一長就忘了,出現了問題也無從下手。究其原因,就是對這些概念沒有理解,知其然但不知其所以然。下面的內容,就是幫助大家知其所以然。

基本原理

  環境變量(environment variables)一般是指在操作系統中用來指定操作系統運行環境的一些參數,如:臨時文件夾位置和系統文件夾位置等。

  環境變量是在操作系統中一個具有特定名字的對象,它包含了一個或者多個應用程序所將使用到的信息。例如WindowsDOS操作系統中的path環境變量,當要求系統運行一個程序而沒有告訴它程序所在的完整路徑時,系統除了在當前目錄下面尋找此程序外,還應到path中指定的路徑去找。用戶通過設置環境變量,來更好的運行進程。

JAVA的初學者,必須要學會配置PATH環境變量,否則無法編譯、運行JAVA程序。那麽,為什麽要配置PATH環境變量呢?PATH環境變量是做什麽的呢?我們從一個常見的問題入手。

當我們安裝好JAVA後,若沒有正確配置PATH環境變量,則在命令行窗口(開始

->運行->輸入cmd,回車)下運行命令java -version(顯示JAVA的版本)命令時,會出現如下的錯誤提示信息:

技術分享圖片

  這條錯誤信息的意思是,你要求運行的“java”這條命令我不認識,不知道是個什麽玩意兒。那麽究竟這個“java”命令是何方神聖呢?在JDK的安裝目錄下(我的是D:\Java\jdk1.6.0_24),有一個bin目錄。打開此目錄,會發現大量的可執行文件,後綴名為exe的文件。其中有一個可執行文件即為java.exe。現在在命令行窗口下把當前目錄切換到這個bin目錄下(Shift+右鍵)。

技術分享圖片

  在此目錄下,運行

dir命令,顯示當前目錄下的所有文件和目錄。從顯示結果中,我們可以清楚地看到“java.exe”這個文件。如下圖所示:

技術分享圖片

  實際上我們執行“java”命令,就是要運行“java.exe”這個可執行文件(我們運行其他命令,本質上也是要執行某個程序文件)。我們現在再來執行 java -version 這條命令試試。在命令行窗口下鍵入java -version,回車,結果如下圖所示:

技術分享圖片

  看來這次執行成功了。執行java -?可查看此命令的幫助信息。可以看到它有很多選項,-version只是其中之一。另外一種方式是,寫出這些可執行文件的完整(絕對)路徑(例如:D:\Java\jdk1.8.0_31\bin\java -version),就可以在任何目錄下執行了。讀者可自行嘗試。

java命令類似,javac命令目前也能在bin目錄下執行,但到其他目錄下就只能寫出其完整路徑了。在學習JAVA的過程中,我們經常需要使用javacjava這兩條命令來編譯、運行我們的JAVA程序。難道我們每次運行這兩條命令都要先切換到bin目錄下嗎或寫出一長串的絕對路徑嗎?能不能有一個辦法,讓我們能夠在任何目錄下都能自如地運行這些命令呢?

  明白了這些,我們就把bin目錄的完整路徑添加到PATH中。在命令行窗口下,可使用set命令完成此類的任務。直接運行set,會顯示系統當前所有環境變量的值,運行set /?,會顯示關於此命令的幫助信息。

  使用set命令設置環境變量值的格式為:set 環境變量名=環境變量值。我們可以使用命令set path=D:\Java\jdk1.8.0_31\binjava等程序文件所在的目錄添加到PATH環境變量中(Windows下環境變量名不區分大小寫,這與UNIX不同)。但是這樣會使PATH的值只有“D:\Java\jdk1.8.0_31\bin”,它預先設定供其他程序使用的值就都被覆蓋了。因此,我們應該把值“D:\Java\jdk1.6.0_24\bin”追加到PATH中。為此,我們可以使用如下命令:

  set path=%path%;D:\Java\jdk1.8.0_31\bin

  把PATH放在兩個百分號之間,指把PATH原有的值取出。其後的分號表示分隔不同的路徑值,之後才是我們要添加的值。註意,請在英文輸入法狀態下使用此命令。現在我們轉到任意一個目錄下執行java -version命令試試。結果如下圖所示:

技術分享圖片

  可見運行完全成功。但是這種使用set命令的方式設置的環境變量只對當前命令行窗口有效。一旦關閉此窗口,再次運行另一個命令行窗口時,PATH環境變量還是原來的值。因此,我們必須在Windows下修改PATH環境變量。步驟如下:

右擊桌面我的電腦圖標->屬性->高級->環境變量,就打開了了設置環境變量的對話框。上面部分是為某個用戶設置。Windows設計為可多用戶使用一臺機器,每人一個賬戶。為某個賬戶設置的變量只對該用戶有效。下面部分是設置系統變量,對系統中的每個用戶有效。現在一般電腦都只有一個用戶,即Administrator。因此只需要為此賬戶設置即可。找到PATH環境變量,點編輯。在變量值框內現有值的後面輸入英文輸入法的分號,然後添加你想添加的值(在這裏是D:\Java\jdk1.8.0_31\bin)。一路確定,OK

  現在再打開一個命令行窗口,輸入echo %path%命令查看path的值(或者直接使用path命令亦可)。

技術分享圖片

  現在,我們可以看到bin目錄已被添加到PATH中,再在任何目錄下運行java -version命令,均可成功。如下圖所示:

技術分享圖片

  其實我們執行其他命令都是這個原理。舉例來說,當你顯示PATH的值時,你會發現第一個值是C:\WINDOWS\system32。在Windows下打開這個目錄,你會看到很多可執行文件,它們的名字與我們常用的命令的名字是一致的。也就是說,我們執行這些命令,實際上系統就是根據PATH的這個值找到了相應的可執行文件,再運行這些文件的結果。如attrib.exe文件

技術分享圖片

  它對應於attrib命令,這是顯示/設置文件屬性的命令,如下圖所示:

技術分享圖片

  現在我們通過命令set path=(等號右邊什麽都沒有,或隨便寫點東西)來清除PATH的值,再來運行attrib命令試試。如下圖所示:

技術分享圖片

  可以看出,完全相同的命令,現在已無法執行而報錯了。

  下面再通過命令set path=c:\windows\system32Windows下不區分大小寫,因此windowsWINDOWS都正確),把attrib.exe文件所在的路徑添加到PATH中,再運行試試。如下圖所示:

技術分享圖片

  很顯然,目前已能夠正確運行。另外一個常見的例子就是format.com.com文件是另一種可以執行的文件),不過此命令是用來格式化的,實驗時請小心,不要由於失誤而格式化了某個盤。而且,根據上面的描述,在PATH環境變量未正確配置的時候,寫出這些文件的絕對路徑(完整路徑),亦可以正確執行。讀者可自行實驗(在此聲明,由於已事先提醒,因此凡是由於誤操作帶來的數據丟失,概不負責!)。

Q1.2 Java環境變量配置--圖文並茂版

  • win7,win8系統:右鍵點擊桌面計算機→選擇屬性→選擇高級系統設置→選擇高級選 項卡→點擊環境變量→下方系統變量中查找path→雙擊path
  • XP系統:右鍵點擊桌面計算機→選擇屬性→選擇高級選項卡→點擊環境變量→下方系統變量中查找path→雙擊pathjdk安裝目錄下的bin目錄添加到最左邊並添加分號

技術分享圖片

  • path環境變量的參照形配置方式
  • 創建新的變量名稱:JAVA_HOME,為JAVA_HOME添加變量值:JDK安裝目錄,將path環境變量中JDK目錄修改,%JAVA_HOME%\bin;path環境變量具有先後順序

技術分享圖片

  • 我們配置成功後發現javacjava可以到處運行

技術分享圖片

上述摘自http://www.cnblogs.com/wkrbky/p/6351235.html

Q1.3 classpath環境變量的作用

  如果你輸入一個命令,比如java,那麽系統是如何找到這個命令的呢?按照順序,系統先在當前目錄搜索是否有java.exe, java.bat 等。 如果沒有,就得到系統的PATH(不區分大小寫)裏面查找。比如你的環境變量的PATH裏面有 C:\program files\java\jdk1.6\bin,那麽 系統會嘗試在這個目錄下面查找,並且找到了 java.exe 那麽就會執行它。所以 path 就是系統為了搜索某個資源而配置的一個參數。 多個目錄之間用分號(linux裏面用冒號)分割。那麽CLASSPATH呢? 同樣的道理,當我們需要某個class時,系統會自動在CLASSPATH裏面搜索,如果是jar,就自動從jar裏面查找,如果是普通的目錄,則在目錄下面按照package進行查找。但與PATH不同的是,默認的CLASSPATH是不包含當前目錄的,這也是CLASSPATH裏面要包含一個點的道理了。

  Tomcat下的Web應用有兩個預置的classpath : WEB-INF/classes WEB-INF/lib啟動項目,項目就會加載這兩個目錄裏的數據。這是war包的規範.要改變預置的classpath比較麻煩,在Tomcat的配置文件裏沒有發現類似的配置,要實現自己的classloader才能達到目的。一個在tomcat中運行的web應用.它的classpath都包括如下目錄:
我知道的有:
%tomcat%/lib
web-inf/lib
web-inf/classes
環境變量裏的classpath

總結:classpath這是一個定位資源的入口.classpath lib的優先級大於classes;

Q1.4 classpath的配置

  為什麽要配置classpath變量?配置classpath變量,才能使得java解釋器知道到哪裏去找標準類庫,這些標準類庫是別人已經寫好了的,我們只管使用。比如我們常用到java.lang包中的類,在配置classpath變量後被設為默認導入,所以在寫程序時就不用import這個包了。那麽這些標準類庫在哪呢?在以JDKlib目錄下以jar為後綴的文件中:一個是dt.jar,一個是tools.jar,這兩個jar包都位於C:/jdk1.6.0/lib目錄下,所以通常我們都會把這兩個jar包加到我們的classpath環境變量的值為:.; C:\Program Files\Java\jdk1.5.0_17\\lib\tools.jar; C:\Program Files\Java\jdk1.5.0_17\\lib\dt.jar;
如何配置classpath變量?
在系統環境變量那一欄中點擊新建classpath ,具體過程省略,下面只列出其鍵值對:
變量名: CLASSPATH
變量值: .;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;
(註意,CLASSPATH最前面是有個 “.”的,表示當前目錄。用兩個%包圍JAVA_HOME這個變量的意思是引用變量的值,當然如果你不想這樣做,也可以這樣配置classpath的值為:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar; 也就是用JAVA_HOME變量的值替換%JAVA_HOME%;

上述摘自http://www.cnblogs.com/fjhh/p/5370634.html

Q1.5 內部命令、外部命令和批處理文件

我們現在啟動一個命令行窗口,按上述的方法把PATH的值全部清除,然後再運行dircd等命令。出乎我們意料的是,它們仍然能夠正確執行。這,又是什麽原因呢?

我們來看看剛才那些報告錯誤的信息,它們都提到了內部命令外部命令的概念。那麽什麽是內部命令和外部命令呢?

內部命令和外部命令是DOSdisk operating system,微軟早期基於命令行的操作系統)時代的概念,百度百科的解釋是:內部命令是隨每次啟動的COMMAND_COM裝入並常駐內存,而外部命令是一條單獨的可執行文件。粗略地講,所謂內部命令就是最核心、使用最多的命令。為了提高響應速度,系統一啟動,這些命令就被加載到內存,因此可以迅速、直接地執行;而外部命令由於使用相對較少,就不預先加載到內存,當用戶使用時,再到硬盤上(c:\windows\system32)找相應的可執行文件,然後加載到內存執行。像dircd等都是內部命令,而諸如attribformat等都是外部命令。盡管DOS的時代早已成為了歷史,但某些操作卻必須在命令行模式下完成,對專業人士來說更是如此。因此,Windows產品一直保留著命令行模式這個工具。

另外一個概念就是批處理文件(後綴名為.bat,來源於批量的英語單詞batch),它是另外一種可以執行的文件。簡單地說,批處理文件包含了很多DOS命令。文件執行時,就一條一條地執行這些命令。不一定順序執行,像通用的程序設計語言一樣,它也有自己的流程控制。批處理文件創建很簡單:用任何一個文本編輯器(如Windows的記事本)創建一個文本文件,然後把後綴名改為.bat即可。創建好的批處理文件,你也可以用文本編輯器打開,查看它的源代碼

Q1.6 關於CATALINA_HOME環境變量的設置(適用於tomcat6/7

  Tomcat是一個免費開源的Servlet/JSP容器,深受廣大JAVA初學者喜愛。這其中需要設置CATALINA_HOME環境變量,值為tomcat安裝目錄(我的是d:\tomcat7),否則會出現如下的錯誤信息:

技術分享圖片

  這句話的意思就是沒有正確設置CATALINA_HOME環境變量,而此變量是運行Tomcat所必須的。而當你不理會這個信息,在命令行窗口把當前目錄切換到tomcat安裝目錄下的bin目錄下,再執行批處理文件startup.bat來啟動tomcat時,發現也可以成功。難道現在不需要CATALINA_HOME環境變量了嗎?

  實際上,在startup.bat中,首先判斷CATALINA_HOME是否為空。若為空,就把當前目錄設為CATALINA_HOME的值。然後查找CATALINA_HOME所指示的目錄下是否有個bin目錄,此bin目錄下是否有個叫做catalina.bat的批處理文件(此文件負責啟動tomcat)。若沒有,則把當前目錄的父目錄設為CATALINA_HOME的值,再重復上述的查找。若仍失敗,就報圖十所示的錯誤。因此,當你在tomcat安裝目錄下的bin目錄下運行startup.bat文件時,它就會按照上面所說的第二種方式自動正確設置CATALINA_HOME的值,因為catalina.bat文件就在tomcat安裝目錄下的bin目錄裏。

雖然在此種情況下能正確運行,但還是建議你正確設置CATALINA_HOME環境變量。與PATH不同的是,PATH系統本身就由,而CATALINA_HOME需要你自己新建,在環境變量窗口點新建即可。

為了能夠在任何目錄下都能運行tomcat安裝目錄下bin目錄裏的批處理文件,如startup.bat,可把此目錄添加到PATH環境變量中(我的是d:\tomcat7\bin)。為了提高靈活性,可在PATH環境變量的最後添加上%catalina_home%\bin(與前一個值之間不要忘了用英文的分號隔開)。把catalina_home放置在兩個百分號之間,表示引用這個環境變量的值。這樣,當你把tomcat的安裝目錄換了以後,就只需要修改catalina_home的值,而不需要修改PATH的值了,因為它可以自動計算出新的正確值。

本章內容摘自http://www.cnblogs.com/wkrbky/p/6351235.html,若有其它出處已註明

Question20180106 Java環境變量的配置及為什麽要配置環境變量