【发布时间】:2015-12-09 16:40:58
【问题描述】:
这个问题类似于this one,但这并没有解决我的问题。
我有一个非常简单的 Google AppEngine / Java 应用程序。它自 2011 年以来一直在运行,并且不使用 maven 或其他我认为不需要的花哨的东西。最近,我向此应用程序添加了 Cloud Endpoints。我没有使用生成的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下,和default和module同级。编译后的 Java 类出现在default/WEB-INF/classes 下,这表明我做对了。 GAE 在default/WEB-INF 中生成了一个*.api 文件,这是我之前不使用模块时没有看到的。
在本地,我可以看到我的云端点 API,我可以使用它们。当我部署到 AppEngine 并尝试使用 API 资源管理器时,出现异常:
/_ah/spi/BackendService.getApiConfigs java.lang.NullPointerException 在 com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:100) 在 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 应用程序那样进行部署是行不通的。 没有“一键式”部署。 我按照Programming Google App Engine with Java 中的说明操作,最终得到了一堆 Eclipse 项目。它是enterprisey,但我可以让它抛出与我之前部署的简单版本相同的异常。 我不知道我是否取得了任何进展。
【问题讨论】:
-
顺便说一句,maven!= 代码生成工具(或类似的东西)。它就像一个makefile(用于您编写的代码)。是的,2015 年 Maven 太陈旧了,不要使用它 :)
-
@Igor Artamonov 是的 makefile,我很怀念它们。我会称之为 maven 巴洛克风格。谷歌在他们的 appengine 文档中经常使用它,所以它不会是过时的吗? ;)
标签: java google-app-engine google-cloud-endpoints gae-module app-engine-modules