这个问题类似于这个问题,但这并没有解决我的问题。
我有一个非常简单的 Google AppEngine / Java 应用程序。它自 2011 年以来一直在运行,并且不使用 maven 或其他我认为不需要的花哨的东西。最近,我向此应用程序添加了 Cloud Endpoints。我没有使用 generated endpoint-libs
,因为我似乎不需要它,没有它一切正常。
该应用程序有一个前端和一个后端已经有一段时间了。我现在正在尝试将这些转换为模块:前端将成为默认模块,后端将成为另一个模块。
我的旧项目的结构是这样的:
project
|- src
| |- ... Java source files ...
|
|- war
| |- WEB-INF
| | |- appengine.xml
| | |- backends.xml
| | |- cron.xml
| | |- web.xml
我通过为 Java 类提供正确的注释来实现云端点。没有花哨的 Maven 产生魔法。
我知道我需要为每个模块创建一个目录,如下所示:
project
|- default
| |- WEB-INF
| | |- appengine.xml
| | |- cron.xml
| | |- web.xml
|
|- module
| |- WEB-INF
| | |- appengine.xml
| | |- web.xml
|
|- META-INF
| |- appengine-application.xml
| |- application.xml
我的问题是:
- 我应该把
src
目录放在哪里? - 我应该在中声明我的云端点类
default/WEB-INF/web.xml
吗? - 每个模块可以有自己的
WEB-INF/cron.xml
吗?
如果看起来我不知道自己在做什么,那可能是对的,但我不想将所有内容都放在 maven pom 文件中,编写 gradle 脚本等,而是专注于实际应用程序。这可能是因为我在 vi 和 emacs 的陪伴下长大,那时我们自己编写代码。;)
更新:
我将 src 目录与和project
放在同一级别下。编译后的 Java 类出现在 下,这表明我做对了。GAE 在 中生成一个文件,我以前在不使用模块时没有看到该文件。default
module
default/WEB-INF/classes
*.api
default/WEB-INF
在本地,我可以看到我的云端点 API,并且可以使用它们。当我部署到 AppEngine 并尝试使用 API 资源管理器时,出现异常:
/_ah/spi/BackendService.getApiConfigs java.lang.NullPointerException at com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:100) at com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet .java:71) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
等等……
我确实添加了 OAuth2 凭据并将它们设置在我的云端点配置中。我找不到 的代码SystemServiceServlet
,但我猜它找不到我的 API 类(在 中配置default/WEB-INF/web.xml
)。
另一个更新:
我了解到 AppEngine 模块需要企业归档 (ear) 结构,并且像简单的 GAE 应用程序那样进行部署是行不通的。没有“一键式”部署。我按照使用 Java 编程 Google App Engine中的说明进行操作,最终得到了一堆 Eclipse 项目。它相当企业化,但我可以让它抛出与我之前部署的简单版本相同的异常。我想知道我是否取得了任何进展。