2013-05-01 141 views
0

後我有留言的項目中使用Maven的原型com.google.appengine.archetypes:guestbook-archetype創建了谷歌的例子。當我使用mvn appengine:devserver在本地運行它時,它運行正常,當我嘗試將它部署到Google Appspot時,問題就開始了。我得到以下信息:GAE - ClassNotFoundException的部署Appspot上服務器

Error: Server Error 

The server encountered an error and could not complete your request. 
If the problem persists, please report your problem and mention this error message and the query that caused it. 

在日誌中我可以看到:

2013-05-01 05:38:28.356/500 3166ms 0kb Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.63 Safari/537.31 
2001:6d8:10:a014:5176:bdbe:c152:53c0 - - [01/May/2013:05:38:28 -0700] "GET/HTTP/1.1" 500 0 - "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.63 Safari/537.31" "aghinzop.appspot.com" ms=3167 cpu_ms=2100 loading_request=1 app_engine_release=1.7.7 instance=00c61b117cdf51947e909cbfaf52e1739a7f4c 
W 2013-05-01 05:38:28.325 
EXCEPTION 
java.lang.ClassNotFoundException: ioserv.ioserv.SignGuestbookServlet 
    at com.google.appengine.runtime.Request.process-53e8711216f37199(Request.java) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:359) 
    at org.mortbay.util.Loader.loadClass(Loader.java:91) 
    at org.mortbay.util.Loader.loadClass(Loader.java:71) 
    at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:73) 
    at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:242) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685) 
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140) 
    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:480) 
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:487) 
    at com.google.tracing.TraceContext.runInContext(TraceContext.java:774) 
    at com.google.tracing.TraceContext$DoInTraceContext.runInContext(TraceContext.java:751) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:342) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:334) 
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:484) 
    at java.lang.Thread.run(Thread.java:722) 
E 2013-05-01 05:38:28.326 
javax.servlet.ServletContext log: unavailable 
javax.servlet.UnavailableException: ioserv.ioserv.SignGuestbookServlet 
    at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:79) 
    at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:242) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685) 
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140) 
    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:438) 
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:480) 
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:487) 
    at com.google.tracing.TraceContext.runInContext(TraceContext.java:774) 
    at com.google.tracing.TraceContext$DoInTraceContext.runInContext(TraceContext.java:751) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:342) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:334) 
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:484) 
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251) 
    at java.lang.Thread.run(Thread.java:722) 
W 2013-05-01 05:38:28.338 
Failed startup of context [email protected]11c3e97{/,/base/data/home/apps/s~aghinzop/1.367061823227494749} 
java.lang.NullPointerException 
    at java.lang.Class.isAssignableFrom(Native Method) 
    at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:256) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685) 
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140) 
    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:438) 
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:480) 
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:487) 
    at com.google.tracing.TraceContext.runInContext(TraceContext.java:774) 
    at com.google.tracing.TraceContext$DoInTraceContext.runInContext(TraceContext.java:751) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:342) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:334) 
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:484) 
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251) 
    at java.lang.Thread.run(Thread.java:722) 
C 2013-05-01 05:38:28.342 
Uncaught exception from servlet 
javax.servlet.UnavailableException: Initialization failed. 
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:228) 
    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:438) 
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:480) 
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:487) 
    at com.google.tracing.TraceContext.runInContext(TraceContext.java:774) 
    at com.google.tracing.TraceContext$DoInTraceContext.runInContext(TraceContext.java:751) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:342) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:334) 
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:484) 
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251) 
    at java.lang.Thread.run(Thread.java:722) 
I 2013-05-01 05:38:28.355 
This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This request may thus take longer and use more CPU than a typical request for your application. 

以下是一些基本的設置我在Eclipse和部署日誌(我使用App Engine的Eclipse插件)。

enter image description here

我不知道什麼是「禁用,因爲這是一個Maven項目」是指這裏。你能解釋一下嗎?我應該檢查這個盒子嗎?

enter image description here

App Engine的SDK這裏選的是由Eclipse插件提供的一個。

enter image description here

下面是通過插件提供的庫。還有一些Maven庫由原型添加。

enter image description here

這裏是在WEB-INF/lib中的庫。我可以看到,他們中很少有人知道可能會丟失一些東西。問題是當我試圖將libs複製到這個文件夾時,我得到了Cannot paste the clipboard contents into the selected elements。我怎樣才能做到這一點?在一個正常的動態Web項目(使用這個方面),它就像Properties>Deployment Assembly>Add一樣簡單,但在這裏我不知道如何做到這一點。

我真的很感謝您的幫助!謝謝!

回答

1

我不知道什麼是「禁用,因爲這是一個Maven項目」是指這裏。你能解釋一下嗎?我應該檢查這個盒子嗎?

有兩種方式來管理你的應用程序(特別是web文件夾),一個讓maven做它,其他讓谷歌eclipse插件做。由於您的應用程序是由maven構建的,因此默認假設是您的web應用程序管理由maven自己完成,因此默認情況下,Google eclipse插件已將其禁用。 除非你不刪除maven,它應該保持原樣。

即將出錯,我的猜測是,雖然你正在構建,並通過測試的行家,你可能會嘗試通過Eclipse來部署,請嘗試MVN AppEngine上:更新,它應該工作。

希望它有幫助。

+0

謝謝你的回覆!經過近全天與鬥爭我想多了一個解決方案,具體說明如下:http://javanto.com/blog/2012/01/11/gae-eclipse-maven-2-0/有了這個,我去了很遠,但當我瞭解到它僅提供對Hibernate的非常有限的支持並且不支持JPA2時,完全放棄了App Engine。現在我正在cloudbees.com上開發,它支持Tomcat/Spring/Hibernate/Maven的整個堆棧,並且在大約一個小時內就啓動並運行了。我們會看看他們之後是否不會收費,但到目前爲止它表示它應該是免費的。 – Wojtek 2013-05-01 21:50:57

+0

很好,你終於能夠取得進步,並希望你能夠用cloudbees做得很好。 只是要添加,App Engine不支持[JPA 2](https://developers.google.com/appengine/docs/java/datastore/jpa/) – skywalker 2013-05-02 17:03:17

+0

感謝您指出,我必須誤解一些東西。昨天有點累了。但是我仍然認爲App Engine現在太有限了,或者換句話說 - 限制太多了。 – Wojtek 2013-05-02 17:35:03