classpath(dos,eclipse,tomcat)

当JVM(Java虚拟机)启动时,会形成由三个类加载器组成的初始类加载器层次结构:

       bootstrap classloader
                |
       extension classloader
                |
       system classloader

 

system classloader是类路径加载器,即加载classpath路径

 

下面分三种情况说明classpath路径(windows 系统)。

 

1.在DOS命令中,可以使用下面命令来查看当前系统的

C:/>echo %classpath%

结果为 F:/Tomcat 6.0/lib

I:/test/路径下有Test1.class,Test2.class

这两个文件的源代码内容如下:

public class Test1
{
   public static void main(String[] args)
   {
      Test2 test2 = new Test2();
      test2.print();
   }
}

 

public class Test2
{
   public void print()
   {
      System.out.println("this is Test2");
   }
}

 

在DOS中进入I:/test 输入如下的命令:

运行Test1

从图中可以看出,运行Test1.java时抛出错误。

原因:Test1中定义Test2对象时,类加载器会去加载Test2 ,类加载器加载类的路径就是系统变量classpath中指定的路径,而Test2类文件并不在F:/Tomcat 6.0/lib中,所以会抛出java.lang.NoClassDefFoundError错误,在DOS中重新设置系统变量classpath的值为“.”,“.”代表当前路径即I:/test,这时再运行Test1,打印出信息,运行成功,因为类加载器在I:/test下找到了Test2。

 

 

2.在eclipse中新建一个java工程项目MyProject,则会在MyProject工程下产生一个.classpath文件,这个文件就是MyProject工程编译和运行时使用的classpath环境,这时我们在dos命令下键入echo %classpath%命令所显示的系统环境变量的classpath路径会失效,类路径加载器只会去.classpath文件中指定的路径加载类文件或其它资源(eg:XXXX.properties),而不会去加载系统环境变量classpath所指的路径中的类文件或其它资源。

 

    在eclipse中设置工程的classpath:右键工程名->"properties"->"java build path"->在右边的标签页中选择"libraries",可以加上你想要的任何路径和jar包,设定好后在工程下的.classpath文件中可以看到我们加进去的路径和jar包,(注:不要手动修改这个文件,不然会报错的,只能用来看),在"Order and Export"标签页中可以指定类加载器加载路径的顺序,修改后可以再.classpath文件中看到顺序发生变化。

 

 

3.tomcat中classpath的路径设定以及类加载器的相关知识,可以去开tomcat的官方资料,上面介绍的非常详细。

网站地址:http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html

 

 

 

注:

    实际上,如果使用的是1.5以上版本的JDK,完全可以不用设置CLASSPATH环境变量
 
   那么CLASSPATH环境变量的作用时什么呢?当我们使用java Java类名 命令来运行Java程序时,JRE会自动在当前目录下搜索java类,但是1.4以前版本的JDK都没有设计这个功能,这意味着即使当前路劲已经包含了HelloWord.class,并在当前路劲下执行java HelloWord,系统将一样提示找不到HelloWord类。
   如果使用1.4以前版本的JDK,则需要在CLASSPATH环境变量中添加一点(.),用以告诉JRE需要在当前路劲下搜索Java类。
   除此之外,编译和运行Java程序还需要JDK的lib路径下的dt.jar和tools.jar文件里的Java类,因此还需要把这两个文件添加到CLASSPATH环境变量里。
   因此,若使用1.4以前版本的JDK来编译和运行java程序,常常需要设置CLASSPATH环境变量值为 .;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar
   后来SUN改进了JDK的设计,JRE会自动搜索当前路径下的类文件,而且使用Java的编译和运行工具时,系统可以自动加载dt.jar 和 tools.jar文件中的Java类,因此不再需要设置CLASSPATH环境变量

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值