eclipse web项目 user library不能自动copy到项目lib目录

在使用eclipse做web项目时,为了方便管理jar包,自建了各种 User Library作为第三方的库引入项目,在eclipse中不报任何错误,但是当Web项目发布到tomcat的时候,出现错误:

  1. java.lang.ClassNotFoundException  

各种的ClassNotFoundException,很纳闷,明明引入了所有的jar包,为何会报ClassNotFoundException?
上网查找一下,明白了:

classLoader有关,对于纯java项目,它不存在WEB-INF目录,所以在引入jar包的时候一般都是通过buildpath直接引入,例如我要引入Hibernate,那么先定义一个user library,然后通过build path引入即可。 纯java项目使用的本地自己的JRE,那么classLoader在加载jar和class时候是分开的,对于我们自己编写的class,会在APP_HOME/bin下。导入的jar包或者user library的配置信息会出现在APP_HOME/.classpath文件中,ClassLoader会很智能去加载这些classes和jar。

而对于web项目, 虽然eclipse的workspace中仍然有.classpath文件,但即使你导入的了自己定义的user library,它也不会出现在.classpath中,这就是问题的关键。

对于java web项目,它最终不是通过本地的JRE去运行,而是部署到web 服务器,如Tomcat、Weblogic、WebSphere等,这些服务器都实现了自身的类加载器。

以Tomcat典型结果为例,它的目录结构分别对应四个不同的类加载器,关系如下:

common      ---   CommonClassLoader

server          ---    CatalinaClassLoader

shared         ---    SharedClassLoader

webapps     ---    WebappClassLoader

我们的 web 应用都是部署到 webapps 目录下,而 WebappClassLoader加载器专门负责加载 webapps 下所有web项目的 WEB-INF 下的类库和类文件 而我们通过 user library 引入的 jar 包自然不会被 WebappClassLoader 加载器加载,所以才会出现 ClassNotFoundException 。

解决方法:

右键项目,选择properties,然后选择deployment assembly,在这里,将自己用的到UserLibrary添加进来就OK了,在部署项目的时候,eclipse会将UserLibrary的所有jar包copy到tomcat的项目的lib目录下,这样就可以加载了。




  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值