尝试引用外部jar文件时出现NoClassDefFoundError

时间:2011-02-08 01:47:44

标签: jsp tomcat classpath

我想在tomcat web应用程序中引用一些第三方jar文件。我将此行添加到catalina.properties:

shared.loader = /家庭/奥利的/ dev /爪哇/ googleapi_samples / GDATA / JAVA / lib中/ *。罐

但我仍然收到此错误:

org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoClassDefFoundError: com/google/gdata/util/ServiceException
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:491)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:401)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

我验证了com.google.gdata.util.ServiceException位于目录中的gdata-core-1.0.jar文件中:

/家庭/奥利的/ dev /爪哇/ googleapi_samples / GDATA / JAVA / lib中

我修改了catalina.properties后,我确实跳过了tomcat。

更新1: 我尝试将gdata-core-1.0.jar文件复制到 的/ var / lib中/ tomcat6中/ web应用/实施例/ WEB-INF / lib中 作为测试,但也没有解决问题。

更新2: 当我将jar文件直接复制到WEB-INF / lib目录时,它确实有效。我必须解决权限问题。但是当我使用shared.loader设置时,它仍然无法正常工作。我再次确认道路是正确的。

2 个答案:

答案 0 :(得分:2)

我不确定这个,但有两个可能的原因:

  1. shared.loader中指定的路径中存在文件权限问题,可能与摆弄/WEB-INF/lib时的问题相同。

  2. 您没有编辑您认为正在使用的Tomcat实例的catalina.properties文件。例如,如果您从Eclipse内部运行Tomcat,则需要确保已配置Eclipse以接管Tomcat而不是使用工作空间元数据(Eclispe实际上基于Tomcat conf文件的副本运行)。要执行此操作,请取消部署/删除所有项目,双击Tomcat条目并在服务器位置部分中选择使用Tomcat安装。然后将使用Tomcat自己的/conf文件夹中的配置文件。否则,您需要在Eclipse工作区的Servers项目中对其进行编辑。

答案 1 :(得分:0)

您可以尝试使用file://为路径添加前缀吗?

shared.loader=file:///home/ollie/dev/java/googleapi_samples/gdata/java/lib/*.jar