Java 在Eclipse(应用程序引擎)项目中包括JAR文件

Java 在Eclipse(应用程序引擎)项目中包括JAR文件,java,eclipse,google-app-engine,jar,classpath,Java,Eclipse,Google App Engine,Jar,Classpath,我已经为这个问题寻找了好几个小时的解决方案,今天和昨天,我决定在这里解决这个问题,尽管这似乎是一个愚蠢的问题 情境:我在EclipseJavaEE中设置了一个GoogleAppEngine项目。它在那里运行了好几个星期,一切都很好,我可以部署到应用程序引擎,并在Eclipse中进行测试,没有任何问题 现在我需要为f.e.JSON支持和Google可视化API添加JAR包。 一周前我尝试了JSON,但由于失败,我只是下载了源文件并将它们添加到我自己的源代码中。 但是现在有了可视化的东西,它有太多的

我已经为这个问题寻找了好几个小时的解决方案,今天和昨天,我决定在这里解决这个问题,尽管这似乎是一个愚蠢的问题

情境:我在EclipseJavaEE中设置了一个GoogleAppEngine项目。它在那里运行了好几个星期,一切都很好,我可以部署到应用程序引擎,并在Eclipse中进行测试,没有任何问题

现在我需要为f.e.JSON支持和Google可视化API添加JAR包。 一周前我尝试了JSON,但由于失败,我只是下载了源文件并将它们添加到我自己的源代码中。 但是现在有了可视化的东西,它有太多的源文件,所以我需要JAR工作

我所做的:

  • 下载了JAR文件
  • 将它们放在PROJECT/lib文件夹中
  • 选中它们,右键单击,然后单击生成路径>添加到生成路径
发生的情况:一切顺利,我可以导入类并从中创建子类,而不会出现错误。所以很明显,Eclipse识别了类的存在,并且Eclipse成功地导入了它们

然后,我尝试构建它(调试模式),并得到以下错误(我也使用JSON得到的错误):

只有
war/WEB-INF/classes
不存在

哦,还有一件事:我专门找到了关于appengine的文档,他们有时提到
war/WEB-INF/lib
文件夹,所以我也试着把它放在那里。当然,在从构建路径删除并在移动后读取之后。(这就是我粘贴的类路径文件的版本)

有人知道如何解决这个问题吗? 摘要:Eclipse可以识别导入的JAR,但由于某些原因构建失败

编辑:解决方案 我发现:

  • JAR应该在WEB-INF/lib中
  • JAR不应位于lib中的文件夹中,而应全部位于根WEB-INF/lib文件夹中。我把我的放在一个单独的文件夹里,但那不起作用
  • 我做了源代码>清理和源代码>管理导入,结果成功了

你走在正确的轨道上。由于部署到appengine的应用程序打包为war(web应用程序存档),所以库JAR需要位于web-INF/lib中。您应该确保JAR存在,然后将这些JAR添加到eclipse构建路径中。尝试对项目执行“清理”操作并重新构建它,以确保库位于包中。

此解决方案:

  • 将源(.jar文件)复制到war/WEB-INF/lib文件夹中

在将jar文件添加到war/WEB-INF/lib文件夹后,仍然需要将jar文件添加到java构建路径,以避免编译错误

将.jar文件复制粘贴到war/WEB-INF/lib,然后转到(Eclipse中项目的)属性-->Java构建路径-->添加jar-->从当前项目中选择相关的.jar。你应该准备好了

这样做可能“有点”太晚了,但在eclipse中,您不必手动复制。 右键单击项目->构建路径->配置构建路径…->选择展开部件(左)。
在此处添加JAR,它们将在部署时包括在内

清洁操作?我该怎么做?实际上,我对Eclipse还比较陌生。建筑呢?当我点击“调试”或“运行”按钮时,项目正在重新构建,否?我可以在这里的某个地方用解决方案更新帖子吗?我发现:-JAR确实应该在WEB-INF/lib中-JAR不应该在lib中的文件夹中,所有这些都在根WEB-INF/lib文件夹中。我把我的放在一个单独的文件夹里,但没有用。-我做了Source>Clean和Source>manageimports,之后就成功了:)有时候eclipse无法将构建路径中指定的jar复制到WEB-INF/lib文件夹。在我的例子中,在构建路径设置的order和export选项卡下的库条目被取消选中(我不知道为什么),所以我只检查了它们并解决了问题。
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 com.google.appengine.tools.development.DevAppEngineWebAppContext@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 JettyContainerService$ApiProxyHandler@409bad4f: 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
<?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>