【问题标题】:com.google.common.cache.Cache class not found errorcom.google.common.cache.Cache 类未找到错误
【发布时间】:2013-09-04 22:00:36
【问题描述】:

我正在使用 Guava 14.0 jar,以下是我的代码

package org.user.module.test;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.concurrent.TimeUnit;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.Cache;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class test
 */
@WebServlet("/test")
public class test extends HttpServlet  {
    private static final long serialVersionUID = 1L;

    Cache<String, Integer> map;

    public test() {
        super();
        // TODO Auto-generated constructor stub
    }

    public void init() throws ServletException
    {
        map=CacheBuilder.newBuilder().
                maximumSize(100).
                expireAfterAccess(10, TimeUnit.MINUTES).
                build();

    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out=response.getWriter();
        String p=request.getParameter("v");
        Integer a=map.getIfPresent(p);
        if(a==null){
            map.put(p, 1);
            out.println("Putting The Integer:"+a);
        }
        else{
            map.put(p,a++);
            out.println("A is already present and the value is:"+a);
        }

    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

}

错误:

严重:为 servlet org.user.module.test.test 分配异常 java.lang.ClassNotFoundException:com.google.common.cache.Cache 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1701) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1546) 在 java.lang.Class.getDeclaredFields0(Native Method) 在 java.lang.Class.privateGetDeclaredFields(Class.java:2317) 在 java.lang.Class.getDeclaredFields(Class.java:1762) 在 org.apache.catalina.core.DefaultInstanceManager.populateAnnotationsCache(DefaultInstanceManager.java:276) 在 org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:143) 在 org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:125) 在 org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1136) 在 org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:857) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:722)

从这里下载的jar Downlaod Link 链接到我的项目文件夹(项目名称:test2)LINK

【问题讨论】:

  • 你把 JAR 文件放在哪里了?
  • 我已经右键单击项目->配置构建路径->添加库->并选择了番石榴。它在项目内的 lib 文件夹中。看看我编辑的链接
  • 您的 lib 文件夹应位于 /WebContent/WEB-INF 文件夹中。目前,您在 Java 资源下拥有它。从那里删除它。
  • @Rohit:成功了。谢谢

标签: java servlets guava classnotfoundexception


【解决方案1】:

显而易见的答案是; 从应用程序服务器指定的类路径中找不到 Google guava jar。 jar 应该存在于 WEB-INF/classesWEB-INF/lib 中。 Apache Tomcat 还从 $CATALINA_HOME/lib 文件夹加载常用类。

【讨论】:

  • 罐子不进入 /classes。上课。
  • @ThorbjørnRavnAndersen 你是绝对正确的。例如,推动一致性是很好的。如果在调试模式下运行应用程序,热插拔:ing 或覆盖类。
  • 感谢您指出罐子的名称!尝试导入包时,记录不充分的依赖关系会导致复杂化:p
猜你喜欢
  • 2019-04-29
  • 2018-05-19
  • 2018-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
相关资源
最近更新 更多