爲什麼要設置Java環境變量(windows)

爲什麼要設置Java環境變量(windows)

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

一、基本原理

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

  環境變量是在操作系統中一個具有特定名字的對象,它包含了一個或者多個應用程序所將使用到的信息。例如Windows和DOS操作系統中的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的過程中,我們經常需要使用javac和java這兩條命令來編譯、運行我們的JAVA程序。難道我們每次運行這兩條命令都要先切換到bin目錄下嗎或寫出一長串的絕對路徑嗎?能不能有一個辦法,讓我們能夠在任何目錄下都能自如地運行這些命令呢?

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

  使用set命令設置環境變量值的格式爲:set 環境變量名=環境變量值。我們可以使用命令set path=D:\Java\jdk1.8.0_31\bin將java等程序文件所在的目錄添加到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\system32(Windows下不區分大小寫,因此windows與WINDOWS都正確),把attrib.exe文件所在的路徑添加到PATH中,再運行試試。如下圖所示:

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

二、內部命令、外部命令和批處理文件

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

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

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

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

三、關於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的值了,因爲它可以自動計算出新的正確值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章