在将应用程序部署到GAE时,GCM的api.key文件应该位于WAR文件中的哪个位置?

时间:2012-07-10 06:30:58

标签: java android google-app-engine war google-cloud-messaging

我正在尝试使用Tomcat 6在Google Apps上获取以前在我的计算机上运行的.war文件。我在Eclipse中创建了项目,文件结构与Google's GCM Example略有不同。我想我终于有了一切顺序,除了最后一部分。我不知道“api.key”属于哪个目录。我在Google Apps服务器上的日志中的堆栈跟踪如下:

Failed startup of context com.google.apphosting.utils.jetty.RuntimeAppEngineWebAppContext@1ef3ccd{/,/base/data/home/apps/s~[app-name]/1.360213803566389174}
java.lang.IllegalStateException: Could not find file /api.key on web resources)
    at [package-name].ApiKeyInitializer.getKey(ApiKeyInitializer.java:56)
    at [package-name].ApiKeyInitializer.contextInitialized(ApiKeyInitializer.java:45)
    at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548)
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)

您可以在this link查看Google所说的目录。当我关注Google的GCM Demo(第一个链接)时,它将“api.key”文件放在WEB-INF / classes目录下。我在新的Google App Engine结构中尝试了这一点,我得到了上面的错误。我觉得我很亲密,因为很明显我的servlet正在尝试运行,但它找不到这个文件。有谁知道把它放在哪里,所以它可以找到它,我可以让它工作?

1 个答案:

答案 0 :(得分:0)

好的,我明白了。在我的ApiKeyInitializer.java类中,我有这个:

private static final String PATH = "/api.key";

事实上,它应该是这样的:

private static final String PATH = "api.key";

我跟着these instructions了解了构建文件。我注意到它说All other files found in src/, such as the META-INF/ directory, are copied verbatim to war/WEB-INF/classes/。这让我意识到我应该将api.key放在我的Eclipse src目录中,以便在编译时它被正确放置在war / WEB-INF / classes中。除此之外,路径必须相对于src目录,这就是我需要String PATH = "api.key"而不是String PATH = "/api.key"的原因。