解决classNotFound的问题的思路

用Ctrl+Shift+t可以查看class,对于报错信息,我们把没有找到的class放到查找框里进行查看,找到之后把这个jar包放到WEB-INF的lib目录下,build path一下就可以了。

以上是在java web项目中,没有使用maven的情况可以使用.

如果使用maven,有时也会碰到这种情况,原因可能是jar包冲突,也可能是tomcat缓存,还可能是jar包放到了jre的ext目录.分情况处理.

1 tomcat缓存问题,最笨的方法,eclipse中project-clean,然后再选build Automatically,删除server,也就是tomcat,然后重新启动eclipse,重新添加tomcat,向tomcat容器添加项目.

2 jar包放到了jre的ext目录.由于classPath的加载顺序是

1)BootstrapClassLoader(启动类加载器) 
  负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class,加载System.getProperty(“sun.boot.class.path”)所指定的路径或jar。 
2)ExtensionClassLoader(标准扩展类加载器) 
  负责加载java平台中扩展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包。载System.getProperty(“java.ext.dirs”)所指定的路径或jar。 
3)AppClassLoader(系统类加载器) 
  负责记载classpath中指定的jar包及目录中class 
4)CustomClassLoader(自定义加载器) 
  属于应用程序根据自身需要自定义的ClassLoader,如tomcat、jboss都会根据j2ee规范自行实现

如果一个jar包放到jre的ext目录,则会第二顺序加载,它依赖的jar包只会从BootstrapClassLoader中查找,如果依赖后面的加载器,也会报错。解决办法就是退出eclipse后,删除ext中的相关jar包。将jar包放到AppClassLoader或自定义的加载器中。

3 jar包冲突,如果发现某各类继承自两个以上jar包,这就需要用maven的排除功能,后者直接删除低版本的jar包。

你可能感兴趣的:(java)