java環境變數對編譯java程式的影響
JAVA_HOME=/opt/java/jdk1.6.0_13
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
PATH=.:$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
環境變數CLASSPATH與開發java程式密切相關,
在使用javac編譯java程式時,編譯器會在CLASSPATH設定的路徑中尋找相關類,
例如 CLASSPATH中配置了.,即目前的目錄,編譯器會從目前的目錄中尋找相應類,
例如以下例子:
[root@localhost PerfAnalyzer]# ls test/javaTest/
DataCollector.class javaTest.jar Test.class
DataCollector.java manifest.mf Test.java
若環境變了CLASSPATH中沒有配置.,則編譯時間會出現如下錯誤,這是因為此時編譯起不會 從目前的目錄中尋找DataCollector,
而配置了.則編譯正常:
test java : execute ./test/javaTest/Test.java
Test.java:23: 找不到符號
符號: 類 DataCollector
位置: 類 Test
DataCollector collector=new DataCollector();
此外,注意環境變數CLASSPATH應該配置到相關包的最底層路徑,
例如:
***/lib下有很多*.jar包,如果把classpath配置在***/lib目錄層級,編譯器是不會自動在lib目錄下的jar包中尋找類的,它只會在lib目錄下尋找*.java。此時必須將所有jar包的絕對路徑一一附加到CLASSPATH上,這樣編譯器會自動解析jar包,在其中尋找相關類
但是對於Jdk本身的庫檔案jar,在$JAVA_HOME/lib下,主要是tools.jar和dt.jar
[root@localhost lib]# ls *.jar
dt.jar htmlconverter.jar jconsole.jar sa-jdi.jar tools.jar
似乎不需要指向jar的絕對路徑