设置class path(Windows)

#概要#

Java运行时环境在类路径(class path或class search path)中查找类和其他资源。类路径可在调用JDK工具使用-classpath选项设定(优先使用),也可以通过设置CLASSPATH环境变量设定。优先使用前者,即通过-classpath选项设定,是因为这样可以对每个程序单独设置类路径,而不会相互影响。

C:>sdkTool -classpath classpath1;classpath2
或者
C:>set CLASSPATH=classpath1;classpath2

其中:

sdkTool:命令行工具,例如java,javac,javadoc,apt。

classpath1;classpath2:指向.jar文件、.zip文件或class文件的路径。每个_classpath_结尾是一个文件名或是一个目录,这依赖于具体情况:

  • 如果指向的是.jar文件或.zip文件(其中包含.class文件),那么_classpath_结尾是jar文件或zip文件的文件名。
  • 如果指向的是.class文件且这些文件在一个匿名包中,那么_classpath_结尾是包含这些.class文件的目录。
  • 如果指向的是.class文件且这些文件在一个命名包中,那么_classpath_结尾是包含根包(完整包名中的第一项)的目录。

多个路径项被分号隔开。注意在set命令中等号左右不能有空格。

#描述# 类路径告诉JDK工具和程序到哪里去寻找第三方类或用户自定义类(即Java扩展和Java平台类之外的类),默认类路径是当前目录,这样就可以方便使用当前目录编译出的class文件。

JDK,JVM和其他JDK工具通过查找Java平台类(引导类),扩展类和类路径来寻找所需的类。(具体可见Java类查找)大多数程序共用的类库希望利用扩展机制。当你想加载的类(a)不在当前目录及其子目录 或(b)不在扩展机制指定的位置时,你只需设置类路径即可。

如果你刚从老版本的JDK升级,你的开机设置中可能包含不再需要的CLASSPATH设置。你应该删除那些不是程序特定的设置,比如classes.zip。一些使用JVM的第三方应用可能修改你的CLASSPATH环境变量包含它们使用的库,这些设置可以保留。

启动JVM或其他JDK工具时,你可以通过-classpath选项更改类路径,或是使用CLASSPATH环境变量更改。优先使用前者,因为这样你可以为每个程序单独设置相应的类路径,各个程序之间不会相互干扰。

类存储在目录或归档文件中。Java平台类存放在rt.jar中。关于归档文件和类路径工作原理的更多细节可参见下面的理解类路径和包名

注意:一些老版本的JDK中在其默认类路径中包含jdk-dir/classes这一项,这个目录只被JDK使用,而不应被应用程序中的类使用。应用程序的类应该存放在JDK目录之外的目录中。这样,安装新的JDK后,你不必重新安装应用程序类。为了兼容性,若应用程序使用jdk-dir/classes目录,运行时使用的是当前版本,但不保证在将来的版本中可用。

#使用-classpath选项# JDK工具,像java,jdb,javac,javah,运行时都可以使用-classpath选项更改CLASSPATH环境变量中设置的类查找路径。这是更改类路径设置的推荐方法,因为每个程序可以有自己的类路径,而不会与其他应用相互干扰。

运行工具[java][java]还带有-cp选项,是-classpath的缩写。

在非常特殊的情况下,[java][java]和[javac][javac]都带有选项更改自己类库的查找路径,但大多数用户不必使用这些选项

#使用CLASSPATH环境变量# 像前面解释的,通常使用用-classpath选项。而这部分将展示怎样设置CLASSPATH环境变量或删除上次安装遗留的设置。

##设置CLASSPATH##

set CLASSPATH=path1;path2...

这些路径应该以驱动盘符开头,例如C:\。这样即便在不同的盘下也可以查找到相应的类。(如果路径项开头是反斜杠,并且你在D盘,那么类被认为存放在D:,而不是C:)

##清除CLASSPATH##

如果你的CLASSPATH环境变量被设置成了一个不正确的值,或者你的启动脚本设置了不正确的路径,你可以这样清除设置:

C:> set CLASSPATH=

这个命令只在当前命令提示窗口清除掉设置,为保证在未来的会话中都有正确的设置,你应该删除或修改你的启动设置。

##更改启动设置## 在控制面板>系统>高级系统设置>高级页>环境变量

#理解类路径通配符# **类路径项可以包含星号*通配符,它等价于相应目录中文件扩展名为.jar或.JAR的所有文件。**例如类路径项foo/*指定了foo目录下所有JAR文件。类路径项也可以只是一个简单的*,意思是当前目录下所有JAR文件。

包含*的类路径项并不匹配.class文件,为同时匹配.class文件和JAR文件,类路径可以是foo;foo/*或是foo/*;foo,前后顺序决定了foo目录下的类和资源在JAR文件之前加载,或是相反。

**子目录并不递归地扫描查找。**例如foo/*只查找在foo目录下的JAR文件,而不会查找foo/bar目录或foo/baz目录。

展开的类路径中同一目录下的JAR文件的查找顺序是不确定的,在不同平台下可能并不相同,在同意机器上不同时刻也可能不同。一个构造良好的应用不应依赖于与任何特定的查找顺序,如果一个特定的顺序是必须的,那么在类路径这些JAR文件必须显式地枚举出来。

在类加载的过程中,统配符的展开是在main方法调用之前完成的。包含通配符的每个类路径项,都通过枚举相应目录下的JAR文件进行展开,例如,如果目录foo包含a.jar,b.jar,c.jar,那么类路径foo/*将会被展开成foo/a.jar;foo/b.jar;foo/c.jar,这个展开后的字符串就是系统属性java.class.path的值。

CLASSPATH环境变量与-classpath命令行选项设置并没什么不同。通配符在这些情况下都是可用的,但在JAR清单类路径中不可用。

#理解类路径和包名# Java类组织成包,映射为文件系统中的目录。但是,与文件系统不同,当你指定包名时,你需要指定完整的包名。例如类java.awt.Button的包名应总是被指定为java.awt。

例如,假设你希望Java运行时查找包utility.myapp中的一个名为Cool.class的类,如果相应目录为C:\java\MyClasses\utility\myapp,那么类路径应该包含C:\java\MyClasses这一项。

可以使用下面的命令运行这个程序

C:> java -classpath C:\java\MyClasses utility.myapp.Cool

当程序运行时,JVM通过设置的类路径查找类Cool所使用的定义在包utility.myapp中的所有其他类。

注意在命令行中应该指定完整的包名。如果设置类路径包含C:\java\MyClasses\utility,而在命令行中运行java myapp.Cool,相应类不会被找到。

(你可能在想一个类的完整包名是怎么定义的。答案是包名是类的一部分,除非重新编译这个类,包名不可修改)

注意:包指定机制的一个有趣的结果是,同一个包的文件可能存放在不同的目录中。每个类的包名相同,但每个类文件的路径可能不同。

##文件夹和归档文件## 当类存放在目录(文件夹)中时,像 c:\java\MyClasses\utility\myapp,类路径项指向包含包名第一个元素的目录。(在这种情况是C:\java\MyClasses,因为包名时utility.myapp)。

但是当类存放在归档文件(zip文件或jar文件)中时,类路径项是归档文件在文件系统中的路径。例如,使用jar文件中的一个类,命令应该如下所示:

C:> java -classpath C:\java\MyClasses\myclasses.jar utility.myapp.Cool

##多项指定## 为查找目录 C:\java\MyClasses和C:\java\OtherClasses中的类文件,你应如下设置类路径:

C:> java -classpath C:\java\MyClasses;C:\java\OtherClasses ...

注意这两个路径中间被分号隔开。

##指定顺序## 在指定多个类路径项时,指定顺序是非常重要的。查找类时,Java解释器以类路径中各项出现的顺序扫描各项对应的目录。在上面的例子中,Java解释器首先在目录C:\java\MyClasses中查找所需的类,查找不到,再在C:\java\OtherClasses中查找,以此类推。

[java]: http://docs.oracle.com/javase/6/docs/technotes/tools/windows/java.html) [javac]: http://docs.oracle.com/javase/6/docs/technotes/tools/windows/javac.html

转载于:https://my.oschina.net/7gaoxing/blog/109463

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值