在 Eclipse (App Engine) 项目中包含 JAR 文件

2024-01-24

我今天和昨天几个小时都在寻找这个问题的解决方案,所以我决定在这里解决它,尽管这似乎是一个愚蠢的问题。

情况:我在 Eclipse Java EE 中设置了一个 Google AppEngine 项目。它已经存在了好几个星期,一切都运行良好,我可以部署到 App Engine 并在 Eclipse 中进行测试,没有任何问题。

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

我做了什么:

  • 下载了 JAR 文件。
  • 将它们放在 PROJECT/lib 文件夹中。
  • 选择它们并右键单击并单击“构建路径”>“添加到构建路径”。

发生了什么:一切都很顺利,我可以导入类并从中创建子类,而不会出现错误。很明显,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 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

我不知道它用斜杠而不是点打印出类的事实是否是问题的一部分:com/google/visualization/datasource/DataSourceServlet。 在第二部分中,他确实使用了点。

我寻找一个问题很长时间,并听说了有关类路径文件的事情。我的 .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 文件夹中。我把我的放在一个单独的文件夹中,但不起作用。
  • 我做了“源”>“清理”和“源”>“管理导入”,它起作用了。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Eclipse (App Engine) 项目中包含 JAR 文件 的相关文章

随机推荐

  • 按标签过滤和选择

    如何通过选择和忽略标签来获取最新的指标 例如 以下查询 last over time application version site NYC instance Test id 1h 返回以下项目 application version i
  • 使用 Jersey 客户端的连接池

    我对泽西岛很陌生 我进行了搜索 但无法弄清楚是否有办法进入泽西客户 to use 连接池而不是每次发送新请求时都创建连接 整个想法是重用池中的连接集 这将节省大量资源 仅供参考 我不是在寻找连接 保持活动状态 这就是我现在正在做的事情 pu
  • 使用约束 B 样条线近似形状轮廓

    我正在寻找一种生成约束样条线的可能性 以近似形状 在我的例子中 是足迹轮廓 作为原始数据 我有一个包含数百个 xy 坐标对的表 这些坐标是从足迹边界收集的 样条曲线应该只近似数据点 样条曲线不需要通过数据点 我希望能够在一定程度上平滑样条线
  • {m}{n}(“正好n次”两次)是如何工作的?

    所以 以某种方式 玩弄 我发现自己有一个正则表达式 比如 d 1 2 从逻辑上讲 对我来说 这应该意味着 一个数字恰好一次 恰好两次 即一个数字正好两次 但事实上 它似乎只意味着 一个数字恰好一次 因此忽略了 2 String regex
  • 如何在 PHP 中创建受密码保护的存档文件?

    我需要能够使用 PHP 创建带有密码保护的存档 zip 文件 我正在使用 Laravel 5 4 和 PHP 7 1 版本 我看了这个链接here http php net manual en class ziparchive phpPHP
  • 未调用导航栏约 8 像素内的触摸事件

    我有一个带有三个按钮的应用程序 实际上UIView s 水平放置下导航栏 这三个按钮的尺寸足够大 例如 比后退按钮大 但是当点击大致位于顶部三分之一部分时 它们不会响应触摸 我知道导航栏正下方的这个区域是为后退按钮和其他 UINavigat
  • iPhone 上的滚动 div 无需使用 2 个手指?

    我的 iPhone 应用程序中嵌入了 UIWebView 我希望始终在页面上保留锁定的页眉和页脚 DIV 并具有可滚动的中心 DIV 我知道我可以使用 UIView 控件的页眉 页脚来做到这一点 但我希望页眉和页脚是 HTML div 因为
  • rollup 是否将node_modules 捆绑到bundle.js 中?

    我正在试驾rollupjs https rollupjs org using rollup with npm将节点应用程序打包成bundle js我很困惑 rollup 是否支持捆绑全节点应用程序 包括node modules 或者只是项目
  • Kubernetes 中 Docker 容器内的互联网连接

    我有一个基于 jenkins slave 容器的 Kubernetes pod 我在特权模式下安装了 docker 套接字和 docker 二进制文件以及必要的内核模块 在该 pod 内 我构建了 Docker 镜像 并在该镜像上运行 do
  • 使用 xlrd 在 Python 3 中将 xls 转换为 csv

    我使用带有 xlrd 和 csv 模块的 Python 3 3 将 xls 文件转换为 csv 这是我的代码 import xlrd import csv def csv from excel wb xlrd open workbook M
  • 如何以树(多维数组)的形式存储和检索 Apache Solr 字段?

    我需要将结果存储和检索为多维树 而不是平面 键 gt 值 对 让我用一个例子来解释 我有很多类别的产品 每个类别都有一个优先级值 样本结构 name Sample Product categories category Category 1
  • NOT IN 查询不起作用,SQL Server 2008

    之前查询的第一部分not in运行并给我一个包含 100 条记录的列表 第二个查询运行并给出 75 条记录的列表 我正在尝试编写的查询not in是获取一个结果集中的记录 而不是另一个结果集中的记录 我得到的错误是incorrect syn
  • 如何查找我的系统中安装了哪个版本的 TensorFlow?

    我需要找到我安装的 TensorFlow 版本 我正在使用 Ubuntu 16 04 长期支持 这取决于您安装 TensorFlow 的方式 我将使用与TensorFlow的安装说明 https www tensorflow org ver
  • SharePoint Designer 工作流程 - 提示和资源?

    我正在努力修改一些现有的 SPD WF 并努力解决一些概念 包括为什么 2 个看起来相似的 WF 不会产生相同的输出 你们中是否有人使用过 SharePoint Designer 工作流并知道任何好的资源 比 MSDN 介绍更详细 或有关此
  • 如何隐藏 UIImagepickercontroller 中的状态栏?

    我是 iOS 开发新手 我试图隐藏状态栏UIImagePickerController 每当我单击 拍照 时 就会出现状态栏 它并不隐藏 我希望状态栏仅隐藏在UIImagePickerController 这是我的代码 IBAction t
  • 在机器对机器场景中使用 MSAL 作为 CSP

    我正在尝试使用官方 nuget 库来使用 GraphAPI https github com microsoftgraph msgraph sdk dotnet https github com microsoftgraph msgraph
  • 播放框架WS url空间

    我在 play 框架 2 3 3 中调用 WS url 时遇到问题 其中 url 包含空格 所有其他字符均自动进行 url 编码 但空格除外 当我尝试将所有空格更改为 20 时 WS 由于 字符而将其转换为 2520 对于空格 我得到了 j
  • 为什么锁定 std::mutex 两次“未定义行为”?

    按照这个article http www devx com SpecialReports Article 38883 1954 如果您尝试从同一线程两次锁定非递归互斥锁 而中间没有解锁 则会出现未定义的行为 我非常天真的想法告诉我为什么他们
  • Neo4j 2.0 双类型转储

    在 Neo4j 2 0 社区 上 当我转储包含一些具有 Double 类型属性的节点的数据库时 我获得一个具有科学记数法值的文件 ex 1 43524185E8 导入此文件时 neo4j shell 失败并出现以下错误 Invalid in
  • 在 Eclipse (App Engine) 项目中包含 JAR 文件

    我今天和昨天几个小时都在寻找这个问题的解决方案 所以我决定在这里解决它 尽管这似乎是一个愚蠢的问题 情况 我在 Eclipse Java EE 中设置了一个 Google AppEngine 项目 它已经存在了好几个星期 一切都运行良好 我