Java Path (轉)
***轉***/Message_Board/Send.?sendto=iamfancy">iamfancy(邊城狂人)
通常,我們需要設定三個環境變數:_HOME、PATH 和 CLASSPATH。
JAVA_HOME:該環境變數的值就是 Java 所在的目錄,一些 Java 版的和一些 Java 的工具需要用到該變數,設定 PATH 和 CLASSPATH 的時候,也可以使用該變數以方便設定。
PATH:指定一個路徑列表,用於搜尋可的。執行一個可執行檔案時,如果該檔案不能在當前路徑下找到,則依次尋找 PATH 中的每一個路徑,直至找到。或者找完 PATH 中的路徑也不能找到,則報錯。Java 的編譯命令 (javac),執行命令 (java) 和一些工具命令 (javadoc, j 等) 都在其路徑下的 bin 目錄中。因此我們應該將該路徑新增到 PATH 變數中。
CLASSPATH:也指定一個路徑列表,是用於搜尋 Java 編譯或者執行時需要用到的類。在 CLASSPATH 列表中除了可以包含路徑外,還可以包含 .jar 檔案。Java 查詢類時會把這個 .jar 檔案當作一個目錄來進行查詢。通常,我們需要把 安裝路徑下的 librt.jar (: jre/lib/rt.jar) 包含在 CLASSPATH 中。
PATH 和 CLASSPATH 都指定路徑列表,列表中的各項 (即各個路徑) 之間使用分隔符分隔。在 下,分隔符是分號 (;),而在 Linux 下,分隔符是冒號 (:)。
下面分別說明三個環境變數在 Windows 和 Linux 下如何設定,不過在此之前,我們需要做個假設。假設 JDK 在 Windows 下的安裝路徑是 C:jdk,在 Linux 下的安裝路徑是 /usr/local/jdk/。那麼,安裝後的 JDK 至少會包括如下內容:
C:jdk (/usr/local/jdk)
|-- bin
|-- demo
|-- include
|-- jre
| |-- bin
| `-- lib
`-- lib
***** 在 Windows 下設定
Windows 下使用 set 命令設定環境變數,為了使每一次啟動都設定這些環境變數,應該在盤根目錄下的 autoexec.bat 檔案中進行設定,如:
set JAVA_HOME=C:jdk
set PATH=%JAVA_HOME%bin;C:Windows;C:WindowsCommand
set CLASSPATH=%JAVA_HOME%jrelibrt.jar;.
有些版本的 Windows 不能用 %變數名% 來替換環境變數的內容,那麼就只好直接寫 C:jdk 而不是 %JAVA_HOME% 了。另外,C:Windows 和 C:WindowsCommand 是 Windows 會自動加入路徑的,所以可以從設定中去掉。如果在 autoexec.bat 中已經設定了 PATH,那隻需要將 %JAVA_HOME%bin 加到原來設定 PATH 的那條語句中就行了。
CLASSPATH 也可以根據需要設定或者加入其它的路徑,比如你想把自己寫的一些類放在 C:java 中,就可以把 C:java 也新增到 CLASSPATH 中去,set CLASSPATH=%JAVA_HOME%jrelibrt.jar;C:java;.。
注意,在 CLASSPATH 中包含了一個“當前目錄 (.)”。包含了該目錄後,就可以到任意目錄下去執行需要用到該目錄下某個類的 Java ,即使該路徑並未包含在 CLASSPATH 中也可以。原因很簡單:雖然沒有明確的把該路徑包含在 CLASSPATH 中,但 CLASSPATH 中的 “.” 在此時就代表了該路徑,如:
假設在 C:java 目錄下有可執行的類 HelloJava.class,那麼
C:> set CLASSPATH=C:jdkjrelibrt.jar;. // 設定 CLASSPATH 環境變數,注意最後有一個 “.”
C:> cd java // 轉到 C:java 目錄
C:java> java HelloJava // 執行 HelloJava
Hello, Java. // 執行結果
C:java> _
該例將在 1.3.3 節中分析。
**** 在 Linux 下設定
Linux 下使用“變數名=變數值”設定變數,並使用 export 命令將其匯出為環境變數。為了使每一次登入都自動設定好這些變數,你需要在 ~/.bash_profile 裡或者 ~./bashrc 裡進行設定,如
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/jre/lib/rt.jar:.
設定 PATH 時用的 $JAVA_HOME 是指替換變數 JAVA_HOME 的值到 $JAVA_HOME 所在位置。如上句實際就是 export PATH=/usr/local/jdk/bin:$PATH。這句中 $PATH 也是同樣的作用,不過這裡的 PATH 是指以前設定的 PATH 變數的值,而非本次設定 PATH 變數的值。
注意,在 CLASSPATH 中包含了一個“當前目錄 (.)”。包含了該目錄後,就可以到任意目錄下去執行需要用到該目錄下某個類的 Java 程式,即使該路徑並未包含在 CLASSPATH 中也可以。原因很簡單:雖然沒有明確的把該路徑包含在 CLASSPATH 中,但 CLASSPATH 中的 “.” 在此時就代表了該路徑,例如
假設在 /home/fancy/java 目錄下有可執行的類 HelloJava.class,那麼
[fancy@matrix fancy]$ export CLASSPATH=/usr/local/jdk/jre/lib/rt.jar:. // 設定 CLASSPATH,注意最後的“.”
[fancy@matrix fancy]$ cd ~/java // 轉到 /home/fancy/java
[fancy@matrix java]$ pwd // 顯示當前目錄
/home/fancy/java // 當前目錄是 /home/fancy/java
[fancy@matrix java]$ java HelloJava // 執行 HelloJava
Hello, Java // 執行結果
[fancy@matrix java]$ _
該例將在 1.3.3 節中分析
***** 例項分析
1.3.1 節和 1.3.2 節中的用到的實際上是一樣的例子,只是不同,略有差別。
兩個例子都提到一個“可執行的類”,它是指包含了 public static void main(String[] args) 方法的類,這將在下一章 HelloJava 一節中詳述。例中的 CLASSPATH 均未包含 HelloJava.class 所在的目錄(C:java, /home/fancy/java),但是均包含了當前目錄 (.)。因此轉到包含 HelloJava.class 的目錄下去執行 java HelloJava,在 Java 尋找到 CLASSPATH 中的“. (當前目錄,C:java, /home/fancy/java)”時,找到了 HelloJava.class,執行成功。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992267/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java Path icy_ (轉)Java
- Simplify Path leetcode javaLeetCodeJava
- Path Sum leetcode javaLeetCodeJava
- 《nginx 配置之——domain 轉 path》NginxAI
- Java NIO Path介面操作檔案Java
- Java PATH和CLASSPATH配置詳解Java
- 15 Java NIO Path-翻譯Java
- Path Sum II leetcode javaLeetCodeJava
- Java NIO 的 Files Path 和 PathsJava
- Fedora Core中設定PATH(轉)
- [轉]Trees in SQL: Nested Sets and Materialized PathSQLZed
- Java NIO之擁抱Path和FilesJava
- java Build Path Problems:Archive for required libraryJavaUIHive
- Minimum Path Sum leetcode javaLeetCodeJava
- java 檔案的操作(Path、Paths、Files)Java
- java環境變數JAVA_HOME,path,CLASSPATH作用Java變數
- to robbin: 你的<<Java Learning Path>> 可以自由轉載麼?Java
- Java NIO學習系列七:Path、Files、AsynchronousFileChannelJava
- Oracle中的direct path read事件(轉)Oracle事件
- "javax.servlet.http.HttpServlet" was not found on the Java Build PathJavaServletHTTPUI
- Binary Tree Maximum Path Sum leetcode javaLeetCodeJava
- 環境變數PATH,CLASSPATH與JAVA_HOME變數Java
- java.lang.IllegalArgumentException: Path index does not start with a "/" charactJavaExceptionIndex
- Flutter Path(二) : Path 進階Flutter
- [轉載] RPATH/LD_LIBRARY_PATH/RUNPATH
- Flutter Path(一) : Path 與 CustomPainterFlutterAI
- 如何在Java中使用檔案操作API: java.nio.file.Path?- marcobehlerJavaAPI
- Conventional Path Export和Direct Path ExportExport
- Conventional Path Export Versus Direct Path ExportExport
- Java中的Json Path和Json Merge PatchJavaJSON
- crontab on raspberry pi, full path, not relative path, is needed.
- 設定java.library.path的值(Mac/Linux/Windows)JavaMacLinuxWindows
- Oracle for windows - pathOracleWindows
- [BUG反饋]defined('ADDON_PATH') or define('ADDON_PATH', APP_PATH.'Addon');APP
- JAVA web專案報錯no sigar-x86-winnt.dll in java.library.pathJavaWeb
- 關於java.lang.UnsatisfiedLinkError: no swt-win32-3236 in java.library.pathJavaErrorWin32
- jdk安裝以及JAVA_HOME和CLASSPATH以及Path的含義JDKJava
- jsp錯誤: "javax.servlet.http.HttpServlet" was not found on the Java Build PathJSJavaServletHTTPUI