java中path及classpath_java 中PATH, -classpath, -Djava.library.path的区别

1. PATH是个系统环境变量,指定要执行命令的搜索路径。如

exportPATH=A:B:C

当执行:

>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#相同。

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++中的运行时环境变量

exportLD_LIBRARY_PATH=A:B:C    #path containing *.so

要想java程序找到共享库还是要在执行java程序的时候指定java.library.path,用eclipse的话可以设置如下:

Properties->Run/Debug settings->Arguments->VM arguments

—————————————–

-Djava.library.path=/home/miaoyachun/workspace/JNIC/Release

这个是传统的方式,google了下有个tricky的方式让程序动态修改java.library.path

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 JavaRuntime 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.pathList 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等。

喜欢 (0)or分享 (0)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值