Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Java SE 综合讨论区 » 安装/配置/编译/环境  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 CLASSPATH详解 [精华]
acelee



发贴: 0
积分: 0
于 2002-07-26 17:08 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
作者:r12
日期:2001-4-21 0:11:43

设置类路径
结构
可通过对 JDK 工具使用 -classpath 选项(首选方法)或设置 CLASSPATH 环境变量来设置类路径。
    C:> jdkTool -classpath path1;path2...  
C:> set CLASSPATH=path1;path2...

每个 path 以文件名或目录结尾,该文件名或目录取决于将类路径设置成什么:
对于包含 .class 文件的 .zip 或 .jar 文件,路径以 .zip 或 .jar 文件名结尾。
对于未命名包中的 .class 文件,路径以包含 .class 文件的目录结尾。
对于已命名包中的 .class 文件,路径以包含“root”包(完整包名中的第一个包)的目录结尾。
用分号来分隔多个项目。使用 set 命令时,需要省略等号两边的空格(=)。其中 jdkTool 可以为 java、javac、javadoc,等等。有关详细列表,参见 JDK 开发工具。
说明
类路径告诉 Java 应用程序去哪里查找第三方和自定义类 -- 即不是 Java 扩展或 Java 平台一部分的类。在 JDK 1.2 中,JVM 和其他 JDK 工具通过依次搜索平台库、库扩展和类路径来查找类(有关搜索策略的详细信息,参见如何查找类)。
多数应用程序的类库都会充分利用扩展机制。因此,只有想要加载某个类库 (a) 未位于当前目录或其分枝包中 且 (b) 未位于扩展机制所指定的位置时,才需设置类路径。

如果用户是从旧版本 JDK 升级而来,则启动设置可能包括不再需要的 CLASSPATH 设置。这时应该删除任何非应用程序特定的设置。有些使用 Java 虚拟机的第三方应用程序可能修改 CLASSPATH 环境变量以包括它们使用的类库。这种设置可以保留。

可通过在调用 JVM 或其他 JDK 工具时使用 Java 工具的 -classpath 选项改变类路径(例如: java -classpath ...)。这是改变类路径的首选方法。还可通过使用 CLASSPATH 环境变量改变类路径。

注意:JDK 1.2 缺省类路径是当前目录。设置 CLASSPATH 变量或使用 -classpath 命令行开关将覆盖缺省值,因而如果想要在搜索路径中包括当前目录,则必须在新设置中包括“.”。
类可以存储在目录(文件夹)或归档文件(例如 classes.zip 或 classes.jar)中。有关归档文件的详细信息和类路径的工作原理,参见本文档最后的理解类路径和包名。
  
重要说明:JDK 旧版本在缺省类路径中还包括 /classes 项。该目录仅供 JDK 使用,且不用于应用程序类。应用程序类应该放置在 JDK 外部的目录。这样,安装新 JDK 时不必需要重新安装应用程序库。为了与旧版本的兼容性,使用 /classes 目录作为类库的应用程序在当前版本中仍能运行,但不能保证在以后的版本中它们还能运行。

使用 Java 工具的 -classpath 选项
Java 工具 java、jdb、javac 和 javah 具有 -classpath 选项,在工具运行时它将取代缺省类路径或由 CLASSPATH 环境变量所指定的类路径。这是改变类路径设置的推荐方法,因为这样每个应用程序可具有它所需的类路径而又不会干扰其他应用程序。
运行时工具 java 和 jdb 还具有 -cp 选项。该选项是 -classpath 的缩写。

对于非常特殊的情况,java 和 javac 都具有开关,使得可改变它们使用的路径以查找它们自己的类库。但是,绝大多数用户从来都不会用到这些开关。

使用 CLASSPATH 环境变量
如前一节中所述,一般用户将想要使用 -classpath 命令行选项。本节将介绍如何设置 CLASSPATH 环境变量或清除以前安装遗留下的设置。
设置 CLASSPATH
在 DOS 提示符下,可用 set 命令修改 CLASSPATH 环境变量。其格式为:
   set CLASSPATH=path1;path2 ...  

路径应该以指定驱动器的字母开头,例如 C:\...。这样,在偶然切换到不同驱动器时仍可找到类(例如,如果路径项以 \... 开头,并且当前位于驱动器 D: 上,则所需的类将在 D: 而不是 C: 驱动器上找)。
清除 CLASSPATH
如果 CLASSPATH 环境变量被设置成不正确的值,或启动文件或脚本程序设置了不正确路径,则可通过使用下列命令清除 CLASSPATH:
  C:> set CLASSPATH=  

该命令仅清除当前会话的 CLASSPATH。要确保在以后的会话中具有正确的 CLASSPATH 设置,则应该删除或修改启动设置。
更改启动设置
如果在系统启动时设置 CLASSPATH 变量,则查找它的位置取决于所使用的操作系统:
操作系统 方法
Windows 98 和 Windows 95 检查 autoexec.bat 文件中的 set 命令。
Windows NT 启动“控制面板”,选择“系统”,单击“环境”选项卡,并在“用户变量”部分中,检查 CLASSPATH 变量。

理解类路径和包名
Java 类被组织成包,而这些包被映射到文件系统中的目录。但是与文件系统不同的是,无论何时指定包名,都应指定完整包名 -- 永远不要仅指定它的一部分。例如,java.awt.Button 的包名总是应指定为 java.awt。
例如,假定想要 Java 运行环境在包 utility.myapp 中查找名为 Cool.class 的类。如果该目录的路径为 C:\java\MyClasses\utility\myapp,则应该将类路径设置成包含 C:\java\MyClasses。

要运行该应用程序,可使用下述 JVM 命令:

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

当该应用程序运行时,JVM 使用类路径设置查找在 utility.myapp 包中定义的任何其他类。
注意:应在命令中指定完整包名。例如,设置类路径包含 C:\java\MyClasses\utility 并使用命令 java myapp.Cool 是不可能的,因为这找不到该类。

(您可能想知道用什么定义类的包名。答案是:包名是类的一部分,并且不能修改,除非重新编译该类。)

注意:包规范机制一个有趣的结果是,属于相同包的多个文件实际上可存在于不同的目录中。对于每个类,包名都是相同的,但是每个文件的路径可从类路径中的不同目录开始。
文件夹和归档文件
当类存储在目录(文件夹)中时,例如 c:\java\MyClasses\utility\myapp,则类路径项指向包含包名第一个元素的目录(在这里为 C:\java\MyClasses,因为包名是 utility.myapp)。
但是当类存储在归档文件(.zip 或 .jar 文件)中时,类路径项则是该 .zip 或 .jar 文件的路径。例如,要使用位于 .jar 文件中的类库,则命令应该类似下述形式:

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

多重指定
要在目录 C:\java\MyClasses 和 C:\java\OtherClasses 中查找类文件,则可将类路径设置为:
   java -classpath C:\java\MyClasses;C:\java\OtherClasses ...  

注意两个路径之间用分号分隔。
指定次序
指定多个类路径项的次序是相当重要的。Java 解释器将按照目录在类路径变量中的次序在各个目录中查找类。在上例中,Java 解释器首先在目录 C:\java\MyClasses 中查找需要的类。只有当它在该目录中没有找到该类时,解释器才能到 C:\java\OtherClasses 目录中查找。
  


littledeer1974 edited on 2004-10-30 23:05

作者 Re:CLASSPATH详解 [Re:acelee]
littledeer1974

Garbage Collector

CJSDN高级会员


发贴: 1517
积分: 122
于 2004-11-14 14:56 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
欢迎修订(挖帖大行动)


Surround yourself with people who are open to change

作者 Re:CLASSPATH详解 [Re:acelee]
why

問題兒童

总版主


发贴: 4629
积分: 388
于 2006-01-15 23:07 user profilesend a private message to usersend email to whysearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Q: J2sdk1.4 中还需要把 tools.jar, rt.jar 和 dt.jar 加到 Classpath 中吗?
A: http://www.cjsdn.net/post/view?bid=1&id=80248
jdk会加载rt.jar
tools.jar 和 dt.jar 看你用不用

C:\>java -verbose
[Opened E:\Java\j2sdk1.4.2_02\jre\lib\rt.jar]
[Opened E:\Java\j2sdk1.4.2_02\jre\lib\sunrsasign.jar]
[Opened E:\Java\j2sdk1.4.2_02\jre\lib\jsse.jar]
[Opened E:\Java\j2sdk1.4.2_02\jre\lib\jce.jar]
[Opened E:\Java\j2sdk1.4.2_02\jre\lib\charsets.jar]
[Loaded java.lang.Object from E:\Java\j2sdk1.4.2_02\jre\lib\rt.jar]
[Loaded java.io.Serializable from E:\Java\j2sdk1.4.2_02\jre\lib\rt.jar]
[Loaded java.lang.Comparable from E:\Java\j2sdk1.4.2_02\jre\lib\rt.jar]
[Loaded java.lang.CharSequence from E:\Java\j2sdk1.4.2_02\jre\lib\rt.jar]
[Loaded java.lang.String from E:\Java\j2sdk1.4.2_02\jre\lib\rt.jar]
[Loaded java.lang.Class from E:\Java\j2sdk1.4.2_02\jre\lib\rt.jar]
[Loaded java.lang.Cloneable from E:\Java\j2sdk1.4.2_02\jre\lib\rt.jar]
[Loaded java.lang.ClassLoader from E:\Java\j2sdk1.4.2_02\jre\lib\rt.jar]
...


不妨认识一下 JAVA_HOME\lib 底下的 tools.jar 和 dt.jar 是甚么咚咚,需要不需要:
http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/jdkfiles.html
tools.jar : contains non-core classes for support of the tools and utilities in the SDK
dt.jar : the DesignTime archive of BeanInfo files that tell interactive development environments (IDE's) how to display the Java components and how to let the developer customize them for the application.

j2sdk1.4.2
___________|____________________
| | |
bin lib jre
| | __________|_____________________
java.exe tools.jar | |
javac.exe dt.jar bin lib
javap.exe _____|____ __________ ________|_______ ________ ________
javah.exe | | | | | | | |
javadoc.exe java.exe client server rt.jar ext security applet fonts
java.dll | | charsets.jar |
awt.dll jvm.dll jvm.dll localedata.jar


why edited on 2006-01-15 23:10

作者 Re:CLASSPATH详解 [Re:acelee]
xiaolipeng





发贴: 1
积分: 0
于 2006-01-28 15:24 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我有好多不懂的


作者 Re:CLASSPATH详解 [Re:xiaolipeng]
YuLimin

简单就是美

版主


发贴: 866
积分: 123
于 2006-01-29 21:29 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
xiaolipeng wrote:
我有好多不懂的


刚开始学习Java的时候很多人在CLASSPATH、PATH等等这样上面会碰到困难的,慢慢就会理解就知道是怎么回事,的确有个过程去体会并掌握的!



 当兵不后悔!后悔不当兵! 
超越黎明时空,追逐时代潮流!
人,是要靠自己的!简单就是美!
我的Java:http://www.Java2Class.net
我的Blog:http://YuLimin.ItEye.com

flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923