2

我按照http://blog.hivedevelopment.co.uk/2009/08/google-web-toolkit-gwt-mvp-example.html上的示例构建了示例 GWT 应用程序,但后来我想构建其他东西,我打算使用 Google AppEngine。我开始了一个新的 GWT2.0 + AppEngine 项目,并遵循添加相同库的相同设置,从示例项目中复制和修改了我的大部分代码。我的代码可以编译,但现在每次我尝试调试我的应用程序时,我都会收到此异常并且没有任何效果。每次我启动服务时,此异常都会重复两次。我以为我可能缺少 org.apache.commons.logging.Log,但是当我 ctrl+单击该路径时,它是 GWT SDK 中 gwt-dev.jar 的一部分。我需要做什么来解决这个问题?

2010 年 1 月 26 日上午 5:23:13 com.google.apphosting.utils.jetty.JettyLogger 警告警告:com.google.apphosting.utils.jetty.DevAppEngineWebAppContext@460ab1b4{/,/home/asa/Projects/Java/ 失败杂货/购物/战争} java.lang.NoClassDefFoundError: org/apache/commons/logging/Log at com.asaayers.server.guice.ServerModule.configureHandlers(ServerModule.java:20) at net.customware.gwt.dispatch.server .guice.ActionHandlerModule.configure(ActionHandlerModule.java:38) 在 com.google.inject.AbstractModule.configure(AbstractModule.java:59) 在 com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223) ) 在 com.google.inject.spi.Elements.getElements(Elements.java:101) 在 com.google.inject.InjectorShell$Builder.build(InjectorShell.java:135) 在 com.google.inject.InjectorBuilder.build( InjectorBuilder.java:102) 在 com.com.google.inject.Guice.createInjector(Guice.java:69) 在 com.google.inject.Guice.createInjector(Guice.java:92) 在 com.google.inject.Guice.createInjector(Guice.java:92) 在 com .asaayers.server.guice.MyGuiceServletConfig.getInjector(MyGuiceServletConfig.java:11) 在 com.google.inject.servlet.GuiceServletContextListener.contextInitialized(GuiceServletContextListener.java:43) 在 org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler .java:530) 在 org.mortbay.jetty.servlet.Context.startContext(Context.java:135) 在 org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1218) 在 org.mortbay.jetty。 handler.ContextHandler.doStart(ContextHandler.java:500) at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448) at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) 在 org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117) 在 org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) 在 org.mortbay.jetty.handler.HandlerWrapper .doStart(HandlerWrapper.java:117) 在 org.mortbay.jetty.Server.doStart(Server.java:217) 在 org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) 在 com.google.appengine。 tools.development.JettyContainerService.startContainer(JettyContainerService.java:188) 在 com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:120) 在 com.google.appengine.tools.development.DevAppServerImpl.start( DevAppServerImpl.java:217) 在 com.google.appengine.tools.development.gwt.AppEngineLauncher.start(AppEngineLauncher.java:86) 在 com.google.gwt.dev.DevMode。doStartUpServer(DevMode.java:377) 在 com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:938) 在 com.google.gwt.dev.DevModeBase.run(DevModeBase.java:690) 在 com.google .gwt.dev.DevMode.main(DevMode.java:251) 引起:java.lang.ClassNotFoundException: org.apache.commons.logging.Log at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:188) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:307) 在 com.google.appengine.tools。 development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:151) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:252) 在 java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) ... 31 更多dev.DevModeBase.startUp(DevModeBase.java:938) 在 com.google.gwt.dev.DevModeBase.run(DevModeBase.java:690) 在 com.google.gwt.dev.DevMode.main(DevMode.java:251)引起:java.lang.ClassNotFoundException: org.apache.commons.logging.Log at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net .URLClassLoader.findClass(URLClassLoader.java:188) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:307) 在 com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:151) 在 java. lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) ... 31 更多dev.DevModeBase.startUp(DevModeBase.java:938) 在 com.google.gwt.dev.DevModeBase.run(DevModeBase.java:690) 在 com.google.gwt.dev.DevMode.main(DevMode.java:251)引起:java.lang.ClassNotFoundException: org.apache.commons.logging.Log at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net .URLClassLoader.findClass(URLClassLoader.java:188) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:307) 在 com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:151) 在 java. lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) ... 31 更多690) 在 com.google.gwt.dev.DevMode.main(DevMode.java:251) 引起:java.lang.ClassNotFoundException: org.apache.commons.logging.Log at java.net.URLClassLoader$1.run(URLClassLoader .java:200) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:188) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:307) 在 com。 google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:151) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:252) 在 java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) .. . 31 更多690) 在 com.google.gwt.dev.DevMode.main(DevMode.java:251) 引起:java.lang.ClassNotFoundException: org.apache.commons.logging.Log at java.net.URLClassLoader$1.run(URLClassLoader .java:200) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:188) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:307) 在 com。 google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:151) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:252) 在 java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) .. . 31 更多200) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:188) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:307) 在 com.google.appengine .tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:151) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:252) 在 java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) ... 31 更多200) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:188) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:307) 在 com.google.appengine .tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:151) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:252) 在 java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) ... 31 更多loadClassInternal(ClassLoader.java:320) ... 31 更多loadClassInternal(ClassLoader.java:320) ... 31 更多

4

2 回答 2

2

Guice 似乎使用commons-logging。本教程描述了如何将一大堆罐子放在 war/WEB-INF/bin 中。您需要从 commons-logging 站点下载 zip 文件,打开它并找到 commons-logging-1.1.1.jar,然后将其放入 war/WEB-INF/lib。

Commons-logging 会发现你的类路径中有 log4j,并自动使用它。

于 2010-01-26T06:21:52.460 回答
0

Guice 不使用公共日志记录。也许您的其他库之一使用它。Guice 仅依赖于核心 JDK (5.0)。

于 2010-01-26T07:30:23.727 回答