JAR包放在WEB-INF/lib子目录报ClassNotFoundException解决方案

对于Java Web应用依赖的jar包,我们通常会放到WEB-INF/lib目录下,但是笔者喜欢把不同框架的jar包放在不同的子目录下,例如新建一个struts目录存放struts框架的jar包等。
下面是笔者项目结构截图:
这里写图片描述
但是这样会有一个新的问题,项目部署的后启动会报ClassNotFoundException错误:
例如笔者在web.xml配置了spring的监听器:

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:beans.xml</param-value>
    </context-param>
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener> 

应用启动时报错信息如下:

java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1647)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1493)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4115)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4671)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1041)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:964)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)

具体解决方案如下:
1.在项目上点击右键=>properties,点击Deployment Assembly=>Add。
这里写图片描述
2.选择Java Build Path…,点击Next。
这里写图片描述
3.全选需要发布到WEB-INF/lib路径下的jar包,点击Finish案例。
这里写图片描述
4.点击OK案例,关闭Properties窗口,重新发布应用即可。

posted on 2015-06-27 22:26  岚之山  阅读(612)  评论(0编辑  收藏  举报

导航