我一直在尋找一個針對這個問題的解決方案,這個解決方案對於今天的多個小時和昨天的幾個小時都是如此,所以我決定在這裏解決它,雖然這似乎是一個愚蠢的問題。在Eclipse(App Engine)項目中包含JAR文件
情況:我在Eclipse Java EE中安裝了Google AppEngine項目設置。它在那裏多周運行良好,我可以部署到App Engine並在Eclipse中進行測試而無需probs。
現在我需要爲f.e添加JAR包。 JSON支持和Google Visualization API。 我一個星期前試過JSON,因爲它失敗了,我只是下載源文件並將它們添加到我自己的源代碼中。 但現在用Visualizations的東西,它是太多的源文件,所以我需要工作的JAR。
我做了什麼:
- 下載JAR文件。
- 將它們放在PROJECT/lib文件夾中。
- 選中它們並右鍵單擊並單擊Build Path> Add to build path。
發生了什麼事:一切順利,我可以導入類並從它們創建子類而不會出錯。所以很明顯Eclipse認識到這些類的存在,並且Eclipse已經成功導入了這些類。
然後我試圖建立它(調試模式),並得到了以下錯誤(一個我用JSON有太多):
Nov 27, 2011 11:57:48 AM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: failed chartDataServlet: java.lang.NoClassDefFoundError: com/google/visualization/datasource/DataSourceServlet
Nov 27, 2011 11:57:48 AM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: failed c[email protected]727db937{/,/Volumes/Data/eclipse_workspace/kulStats/war}: java.lang.NoClassDefFoundError: com/google/visualization/datasource/DataSourceServlet
Nov 27, 2011 11:57:48 AM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: failed [email protected]: java.lang.NoClassDefFoundError: com/google/visualization/datasource/DataSourceServlet
Nov 27, 2011 11:57:48 AM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: Error starting handlers
java.lang.NoClassDefFoundError: com/google/visualization/datasource/DataSourceServlet
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:176)
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:191)
at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:239)
at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:146)
at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:164)
at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:48)
at com.google.appengine.tools.development.DevAppServerMain.<init>(DevAppServerMain.java:113)
at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:89)
Caused by: java.lang.ClassNotFoundException: com.google.visualization.datasource.DataSourceServlet
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:176)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 35 more
我不知道一個事實,即它打印出的類削減而不是與小點是問題的一部分:com/google/visualization/datasource/DataSourceServlet
。 在第二部分他確實使用了點。
我查找了一個很長時間的問題,並且聽到了有關classpath文件的信息。我的.classpath文件看起來是這樣的:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" output="test-classes" path="test"/>
<classpathentry kind="con" path="com.google.appengine.eclipse.core.GAE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="com.google.appengine.eclipse.core.GAE_CONTAINER/App Engine (1)"/>
<classpathentry kind="lib" path="war/WEB-INF/lib/chart-datasource/lib/commons-lang-2.4.jar"/>
<classpathentry kind="lib" path="war/WEB-INF/lib/chart-datasource/lib/commons-logging-1.1.1.jar"/>
<classpathentry kind="lib" path="war/WEB-INF/lib/chart-datasource/lib/opencsv-1.8.jar"/>
<classpathentry kind="lib" path="war/WEB-INF/lib/chart-datasource/visualization-datasource-1.1.1.jar"/>
<classpathentry kind="output" path="war/WEB-INF/classes"/>
</classpath>
只有war/WEB-INF/classes
不存在..
噢,還有一件事:我發現關於App Engine的文件,特別是他們有時提到war/WEB-INF/lib
文件夾,所以我嘗試把它放在那裏。當然,從建設路徑刪除和移動後閱讀。 (這是我粘貼的類路徑文件的版本)。
有沒有人有一個想法如何解決這個問題? 摘要:Eclipse中識別進口JAR文件,但由於某種原因構建失敗...
編輯:解 我發現:
- JAR文件應該是在WEB-INF/lib目錄
- JAR不應位於lib內的文件夾中,全部位於根WEB-INF/lib文件夾中。我有我的一個單獨的文件夾,並沒有工作。
- 我確實來源>清理和來源>管理進口,它的工作。
清潔手術?我怎麼做?實際上,Eclipse相對比較新。 和建築?當我點擊調試或運行按鈕時,項目被重新構建,不是? –
我可以在這裏更新解決方案的帖子嗎? 我發現以下內容: - JAR確實應在WEB-INF/lib中 - JAR不應位於lib中的文件夾中,全部位於根WEB-INF/lib文件夾中。我有我的一個單獨的文件夾,並沒有工作。 - 我做過源代碼>清理和源代碼>管理導入,並在事後工作:) –
有時eclipse無法複製JAR文件在構建路徑中指定到WEB-INF/lib文件夾。在我的情況下,建立路徑設置的命令和導出選項卡下的庫條目得不到選中(我不知道爲什麼),所以我只檢查了它們並解決了問題。 –