设置CLASSPATH环境变量真的有必要吗?

optman 2003-04-24 05:48:09
看到很多介绍Java运行环境的文章,都说到ClassPath环境变量的设置。而且每每遇到如java.lang.NoClassDefFoundError的错误,一般也都归结为ClassPath环境变量没有设置正确。不巧,今天我也遇到了同样的问题。

我需要运行某个程序,需要Java3D的支持。然而当我把Java3D SDK安装完成之后,出现了java.lang.NoClassDefFoundError错误。那么,我应该在哪里设置ClassPath呢?通过Google搜索,我按照很多人的经验设置ClassPath环境变量了,问题没有解决!

而且,还有一个困扰的问题是我的系统里有很多个Java库,Runtime一个,SDK一个,还有JBuilder也带了一个。绝望之余,我甚至把Java3D往每一个地方都安装了一次,一切依然无用!最后,我的解决办法是把Path的路径修改!把Jre\Bin改为<SDK>\Jre\Bin,也就是统一使用SDK附带的数据!问题随之解决了,虽然有点莫名其妙。

现在,我已经把ClassPath,Java_Home等环境变量都去掉了!程序依然能够很好的运行!

由此得出结论,除了Path路径,其他的Java环境变量都是无用的!另外,我在Sun的文档里也没有看到ClassPath的设置说明,在《Core Java2 Volume2 Fundamentals》一书中也没有提及!或许,这些变量仅仅是以前版本的遗留?

另外一个疑问,Java对公共包的管理似乎有点随意。虽然可以避免"DLL HELL",但随之而来的是数据冗余,经常可以看到一些开放源码的包被很多应用程序附带。

对于Java我是菜鸟,不当之处,请高手指正。


运行环境:Win2K+Java2 1.4



...全文
1103 19 打赏 收藏 举报
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
glassprogrammer 2003-04-28
to optman(optman)

default的jre,一般就在你系统盘的program files下
JAVA_HOME确实是个约定俗成的东东,很多bat文件使用它来找jre或jdk

例如tomcat的setclasspath.bat中有:
if not "%JAVA_HOME%" == "" goto gotJavaHome

  • 打赏
  • 举报
回复
mem_fox 2003-04-25
你要是用的IDE工具的话就不用设置了,要不好多的项目都要设置到一个变量里面去,容易冲突的
  • 打赏
  • 举报
回复
glassprogrammer 2003-04-25
假设你的系统盘在C盘, 那么安装了JDK后, 可以看到目录C:\Program Files\Java\j2re1.4.1_01, 注意C:\Program Files\Java\j2re1.4.1_01\lib和C:\Program Files\Java\j2re1.4.1_01\lib\ext下的jar文件是JVM运行是默认会装载的运行库, 所有有时你不需要设置Classpath就能运行Java程序,只要你没有使用JDK之外的类库.

这个目录是可以通过控制面板中的Java Plug-in来修改了,去看看吧.

我不会设classpath, 但是我会设置JAVA_HOME, 有兴趣知道原因就去看看启动Tomcat的批处理文件吧.
  • 打赏
  • 举报
回复
jieshen 2003-04-25
你可以不要的,只是你要在bin的目录下才可以编译的。升值设置classpath就可以在任何目录下编译了。
  • 打赏
  • 举报
回复
optman 2003-04-25
up
  • 打赏
  • 举报
回复
cloudysunny 2003-04-25
optman说的不错,现在好像SUN也发现当初CLASSPATH设计的初衷已经与现在相背离了,所以建议大家执行java的时候直接加参数 -classpath 带各种包。
以前jre是很依赖classpath这个变量的--你可以装jdk1.1左右的版本,然后把CLASSPATH环境变量删掉,就会连基本的启动主线程都报出找不到CLASS的错误。
  • 打赏
  • 举报
回复
optman 2003-04-25
To glassprogrammer():

果然在Advanced栏里看到
Java Runtime Envirement:Use Java Plug-in Default

只是不知道Default这个东西,到底在哪里?而且,我们也看到所有已经安装的JRE目录,估计是有个地方存放所有这些列表的。

JAVA_HOME的设置,容易理解,主要是告知JRE的位置,特别是有很多JRE的时候。

我很纳闷,为什么SUN在JRE的安装程序里,没有自动设置这个JAVA_HOME环境变量呢?或许,JAVA_HOME的使用,仅仅是人们为了方便约定俗成的约定而已,而非SUN官方的标准。

另外,很多JAVA程序,在自己的启动程序里,比如BAT文件里,内部设定JAVA_HOME这个变量,作为内部使用,或许这样更好!
  • 打赏
  • 举报
回复
optman 2003-04-24
To gameboy999(预防非典,从我做起):

ClassPath是默认,也是全局,其实是一个意思。

首先,我不设置ClassPath,JVM照样能够正确装载标准的运行库,说明其内部有某种机制来查找。

其次,对于公用库(第三方库),我可以使用ClassPath,但是不推荐。

所以,ClassPath本身就是没有必要的!这就是我的推论。

ps:java类别查找器在英文Win2K(Local:English)下显示的是乱码。
  • 打赏
  • 举报
回复
optman 2003-04-24
to leejidongdong(立即动动):

不知道你有没有仔细看清楚上面的帖子,我已经去掉ClassPath,一切OK!

作为反证法,一个足矣!
  • 打赏
  • 举报
回复
hellomartin 2003-04-24
up, 收藏!!
  • 打赏
  • 举报
回复
leejidongdong 2003-04-24
设置classpath当然是重要的,不信你再写写其他的java程序看看,看能不能正常?
  • 打赏
  • 举报
回复
gameboy999 2003-04-24
你试试这个软件吧,可以解决一些你的问题。

http://www.csdn.net/cnshare/soft/16/16708.shtm


你说classpath是全局,其实它应该是默认才是
你自己不是也说可以使用java -cp加你自己的classpath吗

我自己认为除了JDK标准包文件外,要是我引用了别的文件,我会把它打入自己的应用程序,而不是利用classpath加额外的包
  • 打赏
  • 举报
回复
optman 2003-04-24
另外,我认为设置ClassPath这种环境变量就是一种设计上的缺陷!因为ClassPath环境变量是全局的,很容易污染了整个系统!比如,两个应用程序,都带了同一个jar包,而分别是不同的版本!如果这时候,两个应用程序都设置了ClassPath,问题就出现了!虚拟机应该装载哪一个jar包?自然,这个决定于ClassPath中的路径顺序,在前者为优先!好了,如果两个jar包不兼容,那么两个应用程序中必然有一个运行失败!这就是Windows里的DLL Hell!

同样,环境变量Path现在也很少使用了,因为会导致同样的问题。当然还是有一些程序在顽固的使用!Path完全是旧系统的遗留!

作为ClassPath环境变量的替换方案,我认为还是使用-classpath参数比较好。
  • 打赏
  • 举报
回复
optman 2003-04-24
Java.exe有参数-classpath允许指定附加的class,这一点容易理解!而且,很多的IDE就是通过自动设置这个参数来简化我们的开发工作的。

而对于JDK本身,似乎Java有一套机制去找到,为什么呢?如下:

各位需要注意的是,我现在是在命令行方式下运行"java myapp"的,没有指定任何的classpath!

另外,我现在想讨论的是ClassPath这个系统环境变量,而不是Javaexe的参数-classpath。
  • 打赏
  • 举报
回复
hm_se 2003-04-24
养成了一个良好的习惯,还是使用ClassPath吧
  • 打赏
  • 举报
回复
advanced 2003-04-24
不同的应用不同对待,有的会检测系统的classpath.有的自带JDK不用系统的classpath.
  • 打赏
  • 举报
回复
moumouren 2003-04-24
所有的这些都是为了,jvm能找到你的class,只要能找到,放在口袋里都行
  • 打赏
  • 举报
回复
peacock_king 2003-04-24
有些第三方开发包,一般要加入classpath,只有这样才能正常使用jdk的各种工具。

当然啦,如果你用的开发工具比较高级,比如jb、forte等,那就没有必要配置classpath喽。
  • 打赏
  • 举报
回复
tingod 2003-04-24
classpath的设置相当重要,具体的你可以查一下旧贴吧,这方面的帖子很多很多。
下班了,祝你愉快
  • 打赏
  • 举报
回复
相关推荐
发帖
Java SE

6.2w+

社区成员

Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
帖子事件
创建了帖子
2003-04-24 05:48
社区公告
暂无公告