Classpath相关问题

1,现在的应用基本上不需要设置CLASSPATH,尤其是指向tools.jar 和rt.jar,只要能够找到jre,系统自动会找到这些jre自带的classpath(除非你人为地把这些jar文件移动到其他地方去了)

2,有些应用程序的启动程序或者启动脚本会自己设置classpath,如果系统原来有classpath,反而会造成混淆。我现在用eclipse, tomcat, jboss, netbeans ,不需要设置额外的classpath都可以正常运行。

3,classpath太多也导致搜索和装载class的速度减慢,因为loadclass的时候,ClassLoader会从整个classpath里面寻找

4,设置的classpath不利于应用的安装部署,一旦运行环境发生变化(如系统升级或者加入新的jar包)经常因手工设置的classpath不对而造成问题。尤其是,跨平台部署的时候,classpath的目录分隔符都不一样的。

5,设置classpath有时候还造成jdk或者应用程序安装时产生莫名奇妙的错误(由于预先指定的class和新安装的版本冲突导致)

我的解决方案:
1,安装jdk或者jre,基本上都按默认安装(你当然可以决定装在不同的目录下),唯一要设置的环境变量是%JAVA_HOME%。无须设置%CLASSPATH%
3,开发的产品,如果是不经常更新的产品,就自己单独提供一个lib目录,下面存放所有需要的jar文件,然后用一个特殊的启动脚本,自动读取该目录下所有的.jar文件来生成%CLASSPATH%变量。
run.bat:
  1. @echo off
  2. if '%1=='## goto ENVSET

  3. SET APPHOME=%~dp0
  4. SET LIBDIR=%APPHOME%lib
  5. rem echo %LIBDIR%
  6. SET CLSPATH=.
  7. FOR %%c in (%LIBDIR%\*.jar) DO Call %0 ## %%c

  8. rem echo %CLSPATH%
  9. rem echo %0
  10. goto RUN

  11. :RUN
  12. java -cp %CLSPATH% org.mypkg.MyMainClass
  13. goto END

  14. :ENVSET
  15. set CLSPATH=%CLSPATH%;%2
  16. goto END

  17. :END
复制代码

如果是经常更新的产品或者有很多衍生产品的项目,需要共享这些jar的,就采用如下办法:
a)把需要的jar放到 %JAVA_HOME%/jre/lib/ext 目录下
b)把需要的jar放到单独的目录下,然后在运行时设置java的环境变量 java.ext.dirs
java -Djava.ext.dirs=%JAVA_HOME%/jre/lib/ext;C:\myjarlib org.mypkg.MyMainClass

这样做的好处在于:
1)应用程序仅需要加载他们需要的classpath,无需加载所有的。
2)减少出错,由于系统自动读取jar文件名,就不会发生拼写错误,也不会发生重复设置同一个jar文件。
3)有利于部署,自己开发的应用也可以打包成为jar文件,向客户交付的时候只要上传一个文件就可以了,不会漏掉任何东西,也无须在客户处“安装”或者预设置任何东西即可直接运行。

如果你的开发中用了很多第三方的组件,尤其是commons-系列,设置classpath也会是个很头痛的事情,现在可以跟他们告别了,再也不要让设置classpath成为学习/开发和使用java的负担!
既然现在这么多java开发的专业软件都不需要你设置系统的classpath,这是我们应该遵循的一个方向,开发简单、易安装、易用的java应用。尽管很多学习java的教材上还说要设置tools.jar和rt.jar,还在教如何设置系统CLASSPATH环境变量等等,那都是java 1.2以前的事了。现在已经java 1.5了,今年夏天java 1.6都要发布了,我们要接受新的观念,我们要学习,了解classpath的作用和用法,但是,在系统环境变量里面设置classpath,我个人认为,已经是没有必要了。

最后,楼主是不是应该自己试验一下再来提问啊,你就是试着安装,运行一下对你的系统也没什么坏处啊,而且可以加深自己的印象,如果是有错误的话,把错误报上来,我们也可以帮你分析啊。


原文地址:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=719110


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您可以执行以下命令来检查classpath是否设置正确: 在Windows上:`java -cp <路径> ClassName` 在Linux / Unix上:`java -classpath <路径> ClassName` 其中`<路径>`是您要检查的classpath。如果命令执行成功,则表示classpath设置正确。如果出现错误,则表示路径不正确或不存在类文件。 ### 回答2: 要检查classpath是否有问题,可以通过以下几个步骤进行: 1. 查看环境变量:在命令行中输入"echo %classpath%",如果能够显示classpath路径,则说明环境变量设置正确。如果为空或者显示的路径不正确,则说明存在问题。 2. 检查配置文件:如果使用了web容器(如Tomcat),需要确认web工程的部署描述文件(如web.xml)中是否正确配置了classpath路径。 3. 检查项目结构:在IDE中打开项目,确认源码文件(如.java文件)是否位于正确的源码路径下,而非错误的类路径下。要确保源码文件所在的文件夹在classpath中。 4. 检查依赖库:如果项目中使用了第三方库或框架,需要确认这些库的jar文件是否正确地放置在classpath路径下。可以在IDE的项目设置中查看项目的依赖库配置,确认是否有错误或缺失的库。 5. 检查编译输出目录:确认编译后的.class文件是否被正确地输出到了classpath路径指定的目录下。可以在IDE的项目设置中查看编译选项,确认输出目录是否正确配置。 通过以上几个步骤的检查,可以大致确认classpath是否存在问题。如果仍然无法解决问题,可以尝试重新配置classpath,或者搜索相关的报错信息,以找到具体的解决方案。 ### 回答3: 检查classpath是否有问题通常需要进行以下步骤: 1. 验证classpath是否包含所需的依赖库或jar包。可以通过查看项目的构建文件(如pom.xml)或者项目配置文件(如manifest.mf)来确认所需的依赖是否已经正确添加,并位于classpath中。 2. 检查classpath中是否存在重复的依赖。重复的依赖可能会导致冲突或者不可预知的行为。可以通过查看classpath路径中的依赖是否有重复的库文件来进行排查。 3. 确认项目的编译输出目录是否在classpath中。编译后的class文件通常会输出到指定的目录,通常是在项目的根目录下的target文件夹中。确保该目录已经正确添加到classpath里。 4. 检查项目的资源文件是否在classpath中。某些项目可能会使用到一些配置文件或者资源文件,如配置文件、图片、国际化资源等。确保这些文件已经正确地放置在classpath指定的位置。 5. 确认环境变量是否正确配置。一些项目可能会使用到系统环境变量或者自定义的环境变量,这些变量也需要添加到classpath中才能被正确加载和使用。 6. 检查类路径中的顺序是否正确。classpath的加载顺序决定了类的查找顺序,可以通过查看classpath的加载顺序是否与期望的顺序一致来确认是否有问题。 综上所述,通过以上的步骤可以检查classpath是否有问题,并及时进行修正和调整,以确保项目能够正常地加载和运行所需的类和资源文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值