【问题标题】:java.lang.NoClassDefFoundError: com/googlecode/objectify/ObjectifyServicejava.lang.NoClassDefFoundError: com/googlecode/objectify/ObjectifyService
【发布时间】:2014-03-04 21:54:24
【问题描述】:

我尝试在 Appengine 上运行我的项目,但是当我进入登录页面时出现 500 错误和以下堆栈:

    2014-02-07 04:37:02.656
Uncaught exception from servlet
java.lang.NoClassDefFoundError: com/googlecode/objectify/ObjectifyService
    at com.appspot.darkening.server.UserContextListener.contextInitialized(UserContextListener.java:33)
    at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548)
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:219)
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:194)
    at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:134)
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:446)
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437)
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444)
    at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:188)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300)
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441)
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)
    at java.lang.Thread.run(Thread.java:724)
Caused by: java.lang.ClassNotFoundException: com.googlecode.objectify.ObjectifyService
    at com.google.appengine.runtime.Request.process-6d2a94d1cdc4ec4b(Request.java)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:360)
    at com.appspot.darkening.server.UserContextListener.contextInitialized(UserContextListener.java:33)
    at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548)
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437)
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444)
    at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:188)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300)
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441)
    ... 1 more

我的进口:

import com.appspot.darkening.model.User;
import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyService;

它说我的 Usercontextlistener 的第 33 行有问题:

public class UserContextListener implements ServletContextListener {
    private static final Logger log = Logger.getLogger(UserContextListener.class.getName());
    private Objectify ofy;

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        // TODO Auto-generated method stub
    }

    @Override

    public void contextInitialized(ServletContextEvent sce) {

     line 33->  Objectify ofy = ObjectifyService.begin(); <-line33
        ObjectifyService.register(User.class);
        User u1 = new User("123", "123", "Test-User", 1);
                //er wordt een dummy objecten aangemaakt
        Date date = new Date();
        User u = new User("admin", "admin", "Overseer", 5); 

        ofy.put(u);
        ofy.put(u1);

我已导入正确的库,如下所示,但这并不能解决我的问题。 我根本无法弄清楚我现在做错了什么。有人可以帮我解决问题吗?任何帮助表示赞赏。

【问题讨论】:

    标签: java eclipse google-app-engine objectify


    【解决方案1】:

    您的项目中需要这些依赖项:

       <dependency>
            <groupId>com.googlecode.objectify</groupId>
            <artifactId>objectify</artifactId>
            <version>5.0</version>
        </dependency>
    
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>18.0</version>
        </dependency>
    

    【讨论】:

      【解决方案2】:

      您需要将objectify-N.N.N.jarguava-N.N.N.jar 添加到项目的WEB-INF\lib 目录中。请参考 Objectify 项目官方页面上的Setup Wiki。

      【讨论】:

      • 感谢您的回复。我的项目中已经有了 Objectify.jar。无论如何添加了 Guava.jar,但我不使用它。不幸的是,它还不能工作。
      【解决方案3】:

      正确的 objectify jar 没有与您的部署一起打包。您需要弄清楚为什么会这样,这将取决于您如何进行部署(maven、ant、eclipse、intellij 等)。这个问题没有足够的信息;当您应该查看打包和部署时,您正在查看代码。

      【讨论】:

        【解决方案4】:

        不要忘记添加 Romin 提到的 jar 来在您的项目中构建路径。

        【讨论】:

          【解决方案5】:

          我收到以下错误。

          Uncaught exception from servlet
          java.lang.NoClassDefFoundError: com/google/appengine/api/datastore/AsyncDatastoreService
              at com.googlecode.objectify.ObjectifyService.<clinit>(ObjectifyService.java:18)
              at com.isyoudone.dbentity.ClientTokenItem.<clinit>(ClientTokenItem.java:24)
              at com.isyoudone.StoreClientServlet.doGet(StoreClientServlet.java:45)
          

          这与您的相似。当我上传时,它在本地和服务器上都伴随着这些类型的警告。

          Failed to read file: /base/data/home/apps/s~isyoudone/0.375907684014000310/WEB-INF/lib/appengine-jsr107cache-1.9.4.jar
          java.util.zip.ZipException: error in opening zip file
              at java.util.zip.ZipFile.open(Native Method)
              at java.util.zip.ZipFile.<init>(ZipFile.java:228)
              at java.util.zip.ZipFile.<init>(ZipFile.java:157)
              at java.util.jar.JarFile.<init>(JarFile.java:153)
          

          事实证明,虽然我使用的是 maven,但我对将 JAVA_HOME 设置为正确的版本感到沮丧,并更新了 Eclipse 以使用 AppEngine 插件。这已将特定版本的依赖 jar 文件放入

          \src\main\webapp\WEB-INF\lib

          当我最终让 maven 版本正常工作时,它使用了这些文件的错误版本,而不是 maven 目标目录中的文件。删除上面目录中的所有内容,问题就解决了。

          【讨论】:

            【解决方案6】:

            确认文件需要在WEB-INF/lib目录下。当我将罐子放在 lib 下的“UserLibrary”目录中时,我收到了同样的错误。因此,请确保这些文件确实位于 WEB-INF/lib 的根级别,您应该可以继续使用。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-08-30
              • 2012-06-01
              • 2013-12-16
              • 2012-12-02
              • 2019-09-23
              • 2019-11-25
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多