我在Eclipse中设置了一个Google App Engine项目。我添加了一个根级文件夹来包含我的项目的库。我将所有这些库添加到项目的构建路径中。代码编译没有任何错误。当我运行该项目时,我得到启动错误NoClassDef错误。当我手动将这些库添加到war目录的lib文件夹时,这些错误消失了。
为什么Eclipse不为我在构建路径上部署库?我是否需要为Eclipse运行构建脚本?一个构建脚本,它将我的库复制到war dir的lib文件夹中?
答案 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和其他所有内容都已正确配置。