免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5879 | 回复: 10
打印 上一主题 下一主题

关于CLASSPATH的理解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-20 11:36 |只看该作者 |倒序浏览
CLASSPATH是Java环境的一个重要环境变量,特别是Java初学者不容易理解,好多问题仅仅是CLASSPATH设置不正确导致的。仅就个人体会简单的说说CLASSPATH的设置问题。
   CLASSPATH用于Java程序运行时搜索必要的class文件的路径,这很好理解,但也很容易出错,例如:

  1.    CLASSPATH=$JAVA_HOME/lib;.......;.
复制代码

     个人认为以上设置是不正确的,理由是CLASSPATH是为了找到class文件,而在$JAVA_HOME/lib下是没有class文件的,只有一些由class文件打成的包(jar文件),所以正确的设置应该是:

  1.    CLASSPATH=$JAVA_HOME/lib/tools.jar;........;.
复制代码

    Java的库一般都是jar文件,要使用相应的库,CLASSPATH中就需要指明到相应的jar文件而不是直到包含jar文件的路径;但是,如果某个特定的应用提供的库就是一系列的class文件,则CLASSPATH中只要指明到相应的路径就行了。
   另外,CLASSPATH中那个表示当前路径的"."也很重要,很多找不到“程序名.class”的问题都是因此而引起的。
   使用一个jar文件并不一定要在CLASSPATH中指明,例如JDBC的驱动,简单的把相应的文件拷贝到$JRE_HOME/lib/ext下就行了,对这一点例外的是jsp程序,例如使用Tomcat,应该把需要的jar文件拷贝到
$TOMCAT_HOME/common/lib目录下(当然还有其他的解决方法),很多jsp初学者往往会问:我正确设置了CLASSPATH,为什么还是找不到驱动啊。这就说明CLASSPATH仅仅是为Java应用程序而设置的,它对jsp不管用!!
    不知我的理解是否对,欢迎拍砖!

论坛徽章:
0
2 [报告]
发表于 2006-05-20 14:12 |只看该作者
好像$JAVA_HOME/lib下的jar是自动加载的

论坛徽章:
0
3 [报告]
发表于 2006-05-20 17:31 |只看该作者
谢谢LZ的总结,对初学者很有指导作用

论坛徽章:
0
4 [报告]
发表于 2006-05-23 07:28 |只看该作者
LZ的理解是对的,不过我个人认为,最好不要在系统里面设置CLASSPATH环境变量,而是应该在程序的开发和运行环境里面设置。那些设置CLASSPATH为$JAVA_HOME/lib/tools.jar还有rt.jar这些早就没有必要了,现在还设置简直多此一举。tomcat下面的mysql驱动也应该把相应的jar文件放到tomcat下相应的目录中去,也没有必要设置classpath了。

论坛徽章:
0
5 [报告]
发表于 2006-05-23 08:48 |只看该作者
这就说明CLASSPATH仅仅是为Java应用程序而设置的,它对jsp不管用!!

这个对吗?

论坛徽章:
0
6 [报告]
发表于 2006-05-23 08:56 |只看该作者
现在还设置CLASSPATH就是多此一举~~为什么要给自己设置麻烦呢?

论坛徽章:
0
7 [报告]
发表于 2006-05-23 10:59 |只看该作者
开发工作中是不用设置CLASSPATH啦
不过学习j2se的时候,我觉得尤其是初学的时候,不要使用IDE。那么CLASSPATH还是需要设置的,最少也要明白到底CLASSPATH到底干吗用怎么用的才可以。

论坛徽章:
0
8 [报告]
发表于 2006-05-23 11:24 |只看该作者
原帖由 狼神萧枫 于 2006-5-23 08:56 发表
现在还设置CLASSPATH就是多此一举~~为什么要给自己设置麻烦呢?

不必设置CLASSPATH好像是从1.5(或许是1.4)开始的,对于较早版本的JDK还是必要的;
另一方面,对于Windows这样的基本上只有一个用户(尽管可以有多个用户)的情况,也许是多此一举,但对于多用户的操作系统(unix/linux),不同的用户可能工作任务不同,设置特定的CLASSPATH就有必要了,毕竟不是每个用户都有超级用户的权限,可以把用到的包都拷到Java系统的搜索路径里去的,当然Java 文档里推荐的是使用-classpath选项,不过是不是也很麻烦!
至于说Java环境在开发环境中设置(也许是自动的),我以为是更不可取,这样对开发方便了,但最终应用程序还是要脱离开发环境去运行的呀!

论坛徽章:
0
9 [报告]
发表于 2006-05-24 02:41 |只看该作者
您可能没理解我的意思,我是说不需要在系统级别设置CLASSPATH,而是在每个应用的启动过程中单独设置该应用专用的classpath,我有些很好的解决办法,可以自动生成classpath。不共享classpath的原因是有些应用对使用的软件包版本有要求,共享有时候反而造成冲突。我的这个bat文件会自动load所有lib目录下所有的jar文件到classpath里面,省得你一个一个地写了。
http://bbs.chinaunix.net/viewthread.php?tid=698243

论坛徽章:
0
10 [报告]
发表于 2006-05-24 09:01 |只看该作者
现在的jdk1.5已经不需要设置classpath了---我在Linux下是这样,java和javac足够聪明找到它们所需要的。

我在tomcat的启动脚本里设置jdk_home,所以我同意perryhg的“不需要在系统级别设置CLASSPATH”。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP