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的绝对路径