Eclipse未部署引用的库

时间:2011-03-04 18:35:42

标签: java eclipse google-app-engine

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

为什么Eclipse不为我在构建路径上部署库?我是否需要为Eclipse运行构建脚本?一个构建脚本,它将我的库复制到war dir的lib文件夹中?

3 个答案:

答案 0 :(得分:3)

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

或者,您可以使用Maven定义依赖关系并部署到GAE

更新:GAE项目遵循标准Java EE项目结构来构建和部署war文件。惯例是你的lib文件夹在{web-app} / WEB-INF / lib中。谷歌插件自动生成这样的结构(例如来自插件文档):

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标准。

答案 1 :(得分:2)

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

不确定为什么它不会在构建路径上部署lib,但我已经使用Eclipse多年,并且总是按照我描述的方式完成它。然后我只是通过eclipse进行部署,不要使用构建脚本。

答案 2 :(得分:2)

如果未在同一工作区中开发未添加到lib文件夹的库,我建议在库项目的项目属性中启用“Utility Module”facet 。有时Eclipse不会将jar复制到WEB-INF / lib文件夹中,即使Deployment Assembly和其他所有内容都已正确配置。