2011-08-19 119 views
0

我試圖將GWT模塊(我正在研究的一個小型MVP框架)合併到GWT開發模式中的GWT項目上碼頭服務器。如果我將模塊的源直接複製到項目中,我可以這樣做。如果我在項目中包含一個包含該模塊的jar,我也很成功。將GWT模塊項目作爲「必需項目」包含GWT模塊項目時未發現類別

然而,我的偏好是將模塊作爲eclipse中主項目的「必需項目」,因爲模塊和項目都在積極開發之中。不幸的是,當我這樣做了以下錯誤打印到控制檯當我嘗試啓動發展方式的主要項目:

WARNING: failed greetServlet: java.lang.NoClassDefFoundError: com/gmles/framework/client/AuthService 
Aug 19, 2011 7:33:22 PM com.google.apphosting.utils.jetty.JettyLogger warn 
WARNING: failed [email protected]12dd{/,/Users/logan/Documents/workspace/HCASchedule/war}: java.lang.NoClassDefFoundError: com/gmles/framework/client/AuthService 
Aug 19, 2011 7:33:22 PM com.google.apphosting.utils.jetty.JettyLogger warn 
WARNING: failed [email protected]: java.lang.NoClassDefFoundError: com/gmles/framework/client/AuthService 
Aug 19, 2011 7:33:22 PM com.google.apphosting.utils.jetty.JettyLogger warn 
WARNING: Error starting handlers 
java.lang.NoClassDefFoundError: com/gmles/framework/client/AuthService 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:615) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
at java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:151) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:615) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
at java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:151) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
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 org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) 
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) 
at org.mortbay.jetty.Server.doStart(Server.java:224) 
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:185) 
at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:147) 
at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:219) 
at com.google.appengine.tools.development.gwt.AppEngineLauncher.start(AppEngineLauncher.java:86) 
at com.google.gwt.dev.DevMode.doStartUpServer(DevMode.java:500) 
at com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:1055) 
at com.google.gwt.dev.DevModeBase.run(DevModeBase.java:804) 
at com.google.gwt.dev.DevMode.main(DevMode.java:309) 
Caused by: java.lang.ClassNotFoundException: com.gmles.framework.client.AuthService 
at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:151) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
... 48 more 

上爲什麼發生這種情況的任何想法?

+0

請注意,'ClassNotFoundException'和'NoClassDefFoundError'是不同的。 –

回答

0

嘗試將jar放入WEB-INF/lib文件夾中。

+0

將模塊項目的輸出目錄更改爲其自己的WEB-INF目錄不起作用;同樣的錯誤。我不想將其配置爲直接輸出到其他項目的目錄 - 我不妨將模塊源代碼放入主項目中,如果我要這樣做,就從那裏開發。主項目已經配置爲輸出到WEB-INF內的'classes'文件夾。我已經試過把罐子扔進去 - 它可以工作。我真的很想能夠包含模塊的項目,以便我可以同時在多個項目中使用它。 – user903003

+0

我更新了我的答案,並拿出你說的沒有工作。我也希望你在談論什麼;但我還沒有找到方法。我認爲maven可能會做你正在談論的事情;並且你可能能夠編寫一個ANT任務,它在你構建時運行,以確保那裏的lib文件夾是最新的。另外,如果你在linux上,你可能會把一個符號鏈接回到你的build/lib文件夾;但到目前爲止,我還沒有看到一個更簡潔的方法,只需將WEB-INF/lib中的jar放入:/ – Dave

+0

好的,謝謝。我會試着玩一下Maven。我有一種感覺,GWT插件可能只是通過類路徑混淆來削弱日食所需的項目機制。 – user903003

相關問題