java 中PATH, -classpath, -Djava.library.path的区别
2013-09-26 10:45
447 查看
1. PATH是个系统环境变量,指定要执行命令的搜索路径。如
当执行:
时,系统先会在目录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#相同。
classpath路径下,只能是jar或者class 文件,否者会报错,因为他们会被load到JVM中。
上面有个问题,就是如果在两个目录下或两个jar中,两个class file中,存在两个相同的命令或者类名,那么如何选取呢?会选择出现在搜索路径前的目录。
3. -Djava.library.path
类似于c/C++中的运行时环境变量
要想java程序找到共享库还是要在执行java程序的时候指定java.library.path,用eclipse的话可以设置如下:
这个是传统的方式,google了下有个tricky的方式让程序动态修改java.library.path
因为: 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等。
export PATH=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++中的运行时环境变量
export LD_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 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等。
相关文章推荐
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- 菜鸟说给菜鸟听之Beginning Linux Programming——Chapter1(1)
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- [原创]java局域网聊天系统
- java很神奇 用swing制作欢迎屏幕
- java自动生成验证码插件-kaptcha
- ITeye上“10个人,8个人不会解释这个问题”的帖子
- Java IO与NIO的一些文件拷贝测试
- Java反射随记
- Java简单字符串插值实现
- String.intern
- 学习prefuse
- Linux平台下Java程序员的基本功
- DLL(Dynamic Linkable Library) 详解说明
- Java Runtime Environment 5.0 Update 12 下载