1. PATH是个系统环境变量,指定要执行命令的搜索路径。如
[html] view plain copy
-
export PATH=A:B:C
当执行:
[html] view plain copy
-
> cmd
时,系统先会在目录A中找寻命令cmd,如果找到,就执行该命令;否者顺序搜索目录B,如此直到找到该命令,或者直接报错当所有目录都遍历完依然找到该命令。
另外:
那CLASSPATH有什么作用呢?编Java程序的时候都知道import的作用吧!
当要用的class,在某一个.jar下是,你需要在编译时引入,jvm自动去找classpath环境变量引入下面的jar包,
这就是CLASSPATH环境变量的作用
Path=.;C:\j2sdk1.4.2_05\bin;D:\DownLoads\Oracle\bin;D:\DownLoads\oracle\Apache\Perl\5.00503\bin\mswin32-x86;C:\Program Files\Oracle\jre\1.1.7\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;D:\DownLoads;C:\Program Files\Symantec\pcAnywhere\;C:\Program Files\Microsoft SQL Server\80\Tools\BINN
JAVA_HOME=C:\j2sdk1.4.2_05
CLASSPATH=.\;%JAVA_HOME%\lib\tools.jar
(Path没有用到JAVA_HOME变量)
2. -classpath/-cp
指定要执行的class file或者jar包的位置。 但调用一个class定义时,搜索机制与1#相同。
[html] view plain copy
-
java -classpath A/a.jar:B/b.jar:C/c.class
classpath路径下,只能是jar或者class 文件,否者会报错,因为他们会被load到JVM中。
上面有个问题,就是如果在两个目录下或两个jar中,两个class file中,存在两个相同的命令或者类名,那么如何选取呢?会选择出现在搜索路径前的目录。
3. -Djava.library.path
类似于c/C++中的运行时环境变量
[html] view plain copy
-
export LD_LIBRARY_PATH=A:B:C #path containing *.so
要想java程序找到共享库还是要在执行java程序的时候指定java.library.path,用eclipse的话可以设置如下:
[html] view plain copy
-
Properties->Run/Debug settings->Arguments->VM arguments
-
—————————————–
-
-Djava.library.path=/home/miaoyachun/workspace/JNIC/Release
这个是传统的方式,google了下有个tricky的方式让程序动态修改java.library.path
[html] view plain copy
-
private static void loadJNILibDynamically() {
-
try {
-
System.setProperty("java.library.path", System.getProperty("java.library.path")
-
+ ":/home/miaoyachun/workspace/JNIC/Release/");
-
Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
-
fieldSysPath.setAccessible(true);
-
fieldSysPath.set(null, null);
-
-
System.loadLibrary("JNIC");
-
} catch (Exception e) {
-
// do nothing for exception
-
}
-
}
因为: java可以通过System.getProperty获得系统变量的值。而java.library.path只是其中的一个,表示系统搜索库文件的路径。
这个类作用是很大的,我们可以获取很多信息。
System.getProperty()参数大全
java.version Java Runtime Environment version
java.vendor Java Runtime Environment vendor
java.vendor.url Java vendor URL
java.home Java installation directory
java.vm.specification.version Java Virtual Machine specification version
java.vm.specification.vendor Java Virtual Machine specification vendor
java.vm.specification.name Java Virtual Machine specification name
java.vm.version Java Virtual Machine implementation version
java.vm.vendor Java Virtual Machine implementation vendor
java.vm.name Java Virtual Machine implementation name
java.specification.version Java Runtime Environment specification version
java.specification.vendor Java Runtime Environment specification vendor
java.specification.name Java Runtime Environment specification name
java.class.version Java class format version number
java.class.path Java class path
java.library.path List of paths to search when loading libraries
java.io.tmpdir Default temp file path
java.compiler Name of JIT compiler to use
java.ext.dirs Path of extension directory or directories
os.name Operating system name
os.arch Operating system architecture
os.version Operating system version
file.separator File separator ("/" on UNIX)
path.separator Path separator (":" on UNIX)
line.separator Line separator ("\n" on UNIX)
user.name User's account name
user.home User's home directory
user.dir User's current working directory
事实上Linux下还有个环境变量LD_LIBRARY_PATH,如果lib能在这个path里找到,java.library.path就不用配置了,而且不需要关心lib之间依赖的问题。java.library.path在这方面就弱很多,比如lib依赖其他目录的lib等。