1. 程式人生 > >Java為什麼要設定環境變數、JAVA_HOME

Java為什麼要設定環境變數、JAVA_HOME

1. 為什麼要說這個問題?

想起來兩年前剛學習Java時,所有教程第一步都是要求先要設定環境變數。自然不解這是個什麼東西,隨後網上找答案。

現在想來感覺當時看到的答案都是神神叨叨、含糊不清,根本沒有人把問題說明白!使得你「知其然而不知所以然」。當然也有可能是當時的我沒看明白吧……

現在,相信我!看了我的部落格,你不用再找別的地方了!

2. 什麼是環境變數?

環境變數 就是英文直譯:Environment Variable

  1. 變數 知道吧?

    對,就是可以隨意給其賦值的一個儲存單元。

  2. 那麼環境 呢?

    首先,你把作業系統當做是一個最大的軟體,其它軟體如Office、JVM、LOL等等都是執行在這個軟體之內的小軟體。那麼,相對於這些小軟體來說,它們所處的「環境」就是作業系統這個軟體。

  3. 最後,合起來就是“環境中的變數”

    「環境變數」就是作業系統這個軟體中的變數,即:作業系統提供給你的全域性變數

  4. 環境變數有什麼作用呢?

    環境變數沒什麼特別的,變數在任何程式中的作用都是“被賦值/被取值”!這個全域性變數作業系統可以使用,其內的小軟體也可以使用!

3. 環境變數長啥樣?有哪些?

變數長啥樣,環境變數就長啥樣……

XXX = XXX

  1. 在Windows中

    下面是WIN10。Windows是視窗系統,我們不必顯式的使用XXX=XXX這種方式,因為系統給我提供了視窗,可以直觀的看到並編輯。如下圖:

    這裡寫圖片描述

  2. 在Linux中

    設定:

    /etc/profile 檔案中設定,export

    的意思就是將區域性變數設定為環境變數。現有的變數是被這樣一行程式碼設定的:

    export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL 

    這幾個環境變數已經有一些預設值了,不過我們可以追加內容,比如修改PATH

    
    # : 的意思是並列
    
    PATH = /abc/def:$PATH

    檢視:

    檢視全部,使用env命令即可。

    檢視單個,可以使用echo:如echo $JAVA_HOME

4. 在Java中

我們終於知道了環境變數是什麼以及它的作用了。那麼,具體在Java中會用到哪些呢?它們的作用又是什麼呢?

有一點需要首先了解:環境變數大體上是給作業系統的直接上層程式用的。比如Linux中的shell

.sh檔案;Windows中的cmd.bat檔案。

常見的Java相關環境變數及其作用

  1. PATH

    PATH是作業系統用的,用來指定作業系統需要使用到的可執行程式的位置。對於Java來說,通常需要把JDK的bin目錄新增進入PATH中,這樣你就可以在任意目錄下使用bin下面的可執行程式,如javac.exejava.exe等。

    這個變數一定要保證將JRE/JDK的bin納入其中(這裡我說的其實不嚴謹,你可以把javaw.exe等這類檔案複製一份放到任意一個PATH路徑下,不一定是JRE/JDK也行),這樣很多Java程式才能啟動,比如Eclipse

  2. JAVA_HOME

    JAVA_HOME是一個約定,通常它指的是JDK的目錄。如果需要JDK的話,大部分程式會預設去環境變數中取JAVA_HOME這個變數。

    例如,Tomcat的.bat/.sh檔案中就會預設去取JAVA_HOME來用。

    所以,這個變數最需要設定。設定它,可保你萬無一失,一生平安……

  3. JRE_HOME

    同樣,這也是一個約定的變數,通常指JRE目錄。其實大部分Java程式不需要JDK,而是隻需要其子集JRE,所以很多程式也會去取這個變數來用。

    例如,Tomcat中某些.bat檔案中這樣說到:

    rem   JAVA_HOME       Must point at your Java Development Kit installation.
    rem                   Using JRE_HOME instead works as well.
    rem
    rem   JRE_HOME        Must point at your Java Runtime installation.
    rem                   Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME
    rem                   are both set, JRE_HOME is used.

    大意是說:Tomcat去取這倆變數,只要任意一個不為空就行,都不為空就用JRE_HOME了。因為Tomcat不需要JDK中的工具,它只是執行Java程式而已。

    這個變數如果你明確知道應用程式只需要設定這個就行(比如上面Tomcat的註釋),那麼它可以代替JAVA_HOME,且最好就用這個。

  4. CLASSPATH

    CLASSPATH是約定的一個可以設定我們自己的.class, jar檔案所在目錄的變數。不過某個Java程式可以自己決定取與不取這個變數。Tomcat 在某些情況下會去取,你自己的Java程式你不設定就會忽略它的。

    這和Java可執行程式:java.exe的可選配置-cp/-classpath不是一個東西,僅是用意相似:

    java [-options] class [args...]
           (執行類)
    或  java [-options] -jar jarfile [args...]
           (執行 jar 檔案)
    其中選項包括:
    -cp <目錄和 zip/jar 檔案的類搜尋路徑>
    -classpath <目錄和 zip/jar 檔案的類搜尋路徑>
                  用 : 分隔的目錄, JAR 檔案
                  和 ZIP 檔案列表, 用於搜尋類檔案。

    結論:基本上,你不需要它。

  5. CATALINA_HOME

    這是Tomcat用的。叫CATALINA這個名字我估計是因為Tomcat預設服務(也就<Service></Service>標籤)的名字就是CATALINA。當然,是不是其實不重要,畢竟變數的名字可以隨意起(但最好見名知意),重要的是它存什麼值。它的值代表當前tomat根目錄,比如:E:\apache-tomcat-7.0.55

    這個變數,僅當你移動了.bat/.sh等用來啟動Tomcat的檔案(就是不在原來的tomcat\bin下面了)時才需要指定。比如,在Linux中你將catalina.sh複製到/etc/rc.d/init.d/下做自啟動服務時就需要設定一下。

Java程式碼中也有API能獲取環境變數:

  • 獲取並列印

    // 列印單個環境變數
    final String env = System.getenv("PATH");
    System.out.println(env);
    
    // 列印所有環境變數
    final Map<String, String> envMap = System.getenv();
    for (Map.Entry<String, String> env : envMap.entrySet()) {
        System.out.println(env.getKey() + "=" + env.getValue());
    }

總結

最後我們總結一下:

  1. 需要在作業系統下設定的變數:

    1. PATH中包含JRE/JDK的bin目錄。

    2. JAVA_HOME或者JRE_HOME。都設也可以,偷懶就只設 JAVA_HOME就可以。

  2. 很少需要設定的:

    CLASSPATHCATALINA_HOME

相關推薦

Java為什麼設定環境變數JAVA_HOME

1. 為什麼要說這個問題? 想起來兩年前剛學習Java時,所有教程第一步都是要求先要設定環境變數。自然不解這是個什麼東西,隨後網上找答案。 現在想來感覺當時看到的答案都是神神叨叨、含糊不清,根本沒有人把問題說明白!使得你「知其然而不知所以然」。當然也有可能是

Java jdk設定環境變數

第一種方式: 找到安裝目錄(我這裡是M:\java\jdk\bin) 設定環境變數PATH 開啟搜尋小娜,輸入path。如果你是win7或者沒有小娜的win10自己百度如何找到環境變數。 3.點選設定環境變數 點選path,然後編輯 在

SpringBoot 啟動引數設定環境變數JVM引數tomcat遠端除錯

java命令的模版:java [-options] -jar jarfile [args...] 先貼一下我的簡單的啟動命令: java -Xms128m -Xmx256m -Xdebug -Xrunjdwp:server=y,transport=dt_socket,

jdk的安裝不配置環境變數如何執行Java程式Java為什麼可以跨平臺為什麼配置環境變數以及如何配置環境變數

一、jdk的下載大家可以自己去orcale自己進行下載http://www.oracle.com/technetwork/java/javase/downloads/index.html在這裡我給大家分享一下安裝包  https://pan.baidu.com/s/1-pYh

Java - 安裝jdk並設定環境變數

前言 雙十一買了臺新的筆記本,需要重新安裝下Java,這裡記錄下安裝的過程,畢竟萬事開頭難,就算是老手也不一定能一次就把Java安裝成功。 安裝jdk 作為一名Java開發,當然是要安裝jdk了,如果只是需要Java的執行環境,那麼安裝jre就足夠了。另外說下,jdk裡以及包含了jre了。 首先去官網

java linux(ubuntu) 環境變數設定

一https://www.cnblogs.com/hanshuai/p/9604730.html :whereis java //查詢java 安裝路徑:which java //查詢java 執行路徑:ls -lrt /usr/bin/java :ls -lrt

setenvexport函式設定環境變數

    setenv函式   函式 setenv()用來改變或增加環境變數的內容。相關函式有 getenv,putenv,unsetenv。   表頭檔案為#include<stdlib.h>   定義函式 int setenv(const char *na

Mac 設定環境變數的位置檢視和新增PATH環境變數

Mac 啟動載入檔案位置(可設定環境變數) ------------------------------------------------------- (1)首先要知道你使用的Mac OS X是什麼樣的Shell,使用命令 echo $SHELL 如果輸出的是:csh或者是tcs

bat批處理設定Java JDK系統環境變數檔案

自己修改第3行的Java安裝目錄就可以設定JAVA_HOME, classPath,追加到PATH的最前面 JAVA_HOME=C:\Program Files\Java\jdk1.6.0_10 classPath=%JAVA_HOME%\lib\tools.jar;%J

MAC中JAVA安裝和環境變數設定

其他系統安裝JAVA JAVA 安裝 #繞過驗證直接下載 wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie"

安卓ADT和JAVA安裝使用者環境變數設定

假設ADT安裝目錄是: E:\AndroidSDK JAVA安裝目錄是: E:\AndroidSDK\Java 那麼使用者環境變數設定如下: 變數名: ANDROID_SDK 變數值: E:\AndroidSDK\Java 變數名:CLASSPATH 變數值: .;%JA

JDK安裝後為什麼環境變數設定

為什麼要設定環境變數? JDK安裝好後,如果不設定環境變數的話,開啟cmd,要直接javac這個命令,會提示: 因為電腦不知道javac這個命令是在C:\Program Files\Java\jdk1.8.0_65\bin\的這個路徑下面,所以我們要設定好環境變數,來讓電

Mac 可設定環境變數的位置檢視和新增PATH環境變數

Mac 啟動載入檔案位置(可設定環境變數) -------------------------------------------------------  (1)首先要知道你使用的Mac OS X是什麼樣的Shell,使用命令 echo $SHELL 如果輸出的是:csh或者是tcsh,那麼你用的就

linux下getenvputenvsetenv獲取設定環境變數

getenv(取得環境變數內容)  相關函式 putenv,setenv,unsetenv  表頭檔案 #include<stdlib.h>  定義函式 char * getenv(const char *name);  函式說明 getenv()用來取得引數n

linux檢視java jdk安裝路徑和設定環境變數

windows: set java_home:檢視JDK安裝路徑 java -version:檢視JDK版本 linux: whereis java which java (java執行路徑) echo $JAVA_HOMEecho $PATH 二:下面是配置linux

window10 java 設定環境變數

➢ 新建 JAVA_HOME 變數 變數名:JAVA_HOME 變數值:電腦上JDK安裝的絕對路徑 ➢ 新建 CLASSPATH 變數 變數名:CLASSPATH 變數值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

node傳參npm scripts設定環境變數

{ "scripts": { "test": "set arg1=123 && set arg2=456 && node node-傳參.js arg1 arg2 argn" } } console.log(process.argv); con

MAC中JAVA安裝和環境變數設定,java 11

其他系統安裝JAVA JAVA 安裝 ,java 11 wget --no-check-certificate --no-cookies --header \ "Cookie: oraclelicense=accept-securebackup-cookie

Windows如何在cmd命令列中檢視修改刪除與新增設定環境變數

首先明確一點: 所有的在cmd命令列下對環境變數的修改只對當前視窗有效,不是永久性的修改。也就是說當關閉此cmd命令列視窗後,將不再起作用。永久性修改環境變數的方法有兩種:一種是直接修改登錄檔(此種方法目前沒試驗過),另一種是通過我的電腦-〉屬性-〉高階,來設定系統的環

linux安裝jdk設定環境變數

一、解除安裝Linux自帶的jdk # 檢視是否自帶了Java rpm -qa | grep java # 解除安裝Linux自帶的OpenJava yum remove -y java # 或者 rpm -e java 二、上傳或聯網下載jdk # 上傳或聯網下載JD