【问题标题】:Referenced libraries not being deployed by EclipseEclipse 未部署引用的库
【发布时间】:2011-03-04 18:35:41
【问题描述】:

我在 Eclipse 中设置了一个 Google App Engine 项目。我添加了一个根级文件夹来包含我的项目的库。我将所有这些库添加到我的项目的构建路径中。代码编译没有任何错误。运行项目时,出现启动错误 NoClassDef 错误。当我手动将这些库添加到 war 目录的 lib 文件夹时,这些错误就会消失。

为什么 Eclipse 不为我在构建路径上部署库?我是否需要有一个构建脚本才能运行 Eclipse?将我的库复制到战争目录的 lib 文件夹的构建脚本?

【问题讨论】:

  • Google App Engine 是使用 Eclipse WTP 工具来支持 Web 项目还是推出自己的解决方案?如果是 WTP,那么有一种简单的方法可以将任意构建路径条目打包到 WAR 中,而无需将 jar 显式放置在 WEB-INF/lib 中。告诉我,我会记录下来。

标签: java eclipse google-app-engine


【解决方案1】:

对于标准 Java EE 项目库必须位于 {web-app}/WEB-INF/lib 文件夹下。 GAE 要求他们也在那里,以便将您的代码上传到引擎。

您也可以使用 Maven 定义依赖项并部署到 GAE

更新:GAE 项目遵循标准 Java EE 项目结构来构建和部署 war 文件。按照惯例,您的 lib 文件夹位于 {web-app}/WEB-INF/lib 中。 Google 插件会自动生成这样的结构(来自插件文档的示例):

MyTestProject
  src/
    log4j.properties
    META-INF/
      jdoconfig.xml
    com/
      mytestproject/
        MyTestProjectServlet.java
  war/  
    index.html
    WEB-INF/
      appengine-web.xml
      web.xml
      logging.properties
      classes/
      lib/
       ...App Engine JARs... 

该插件允许更改“war”目录的位置,但不能更改库的位置,因为它应该遵循 Java EE 标准。

【讨论】:

  • 是否有来自 GAE 的文档指出库必须位于 {web-app}/lib 下?
  • 我不这么认为,但 Google Eclipse 插件希望它们存在。查看更新
【解决方案2】:

您可以直接将库添加到您的war/lib,然后右键单击库将它们添加到您的构建路径。

不确定为什么它不在您的构建路径上部署库,但我已经使用 Eclipse 多年,并且一直按照我描述的方式进行操作。然后我只是通过 eclipse 部署,不使用构建脚本。

【讨论】:

  • 当然可以,但是为什么 Eclipse 不帮我把它们添加到那个目录呢?
【解决方案3】:

如果未添加到 lib 文件夹的库正在同一个工作区中开发,我建议在库项目的项目属性中启用“实用程序模块”方面。有时 Eclipse 不会将 jar 复制到 WEB-INF/lib 文件夹中,即使部署程序集和其他所有内容都已正确配置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    相关资源
    最近更新 更多