我一直在尝试让 Google Cloud Messaging 在 Eclipse 中工作。我能够编译他们的演示网页上给出的示例并运行它,没有任何错误;但是,当我尝试使用 jersey 创建自己的示例时,当以下代码尝试创建发件人时,我收到运行时错误“java.lang.NoClassDefFoundError:com/google/android/gcm/server/Sender”。
@POST
@Path("/send")
public Response sendMessage() throws IOException
{
Sender sender = new Sender("api_key");
Message message = new Message.Builder().build();
sender.send(message, DataStore.getDevices(), 5);
return Response.status(200).entity("Success").build();
}
注意:我已将真实的 api key 替换为 api_key。我知道它有效,因为我能够通过运行教程中解释的 ant 命令来使演示工作。另外,为了避免歧义,我得到的错误是服务器端的,与 Android 设备无关。
我已经尝试过的事情:
- 我已将 gcm-server.jar 包含在 WEB-INF/lib 文件夹中,并在项目属性下将其包含在构建路径中。
- 正如其他网站上提到的,我也尝试过以包含 gcm-server.jar 的方式包含 json_simple-1.1.jar。我不知道这会如何影响此错误,但我在几个不同的地方看到这被列为答案。
- (解决方案)删除了 tomcat 服务器并创建了一个新服务器。我可能只需清理该项目即可获得相同的结果。
演示教程链接:http://developer.android.com/guide/google/gcm/demo.html .
最佳答案
我刚刚找到了解决问题的方法。无奈之下,我从 eclipse 中删除了旧的 Tomcat 服务器并创建了一个新服务器。当我再次运行该项目时,完全没有任何问题。当我第一次设置项目时,我将 jar 文件包含在 WEB-INF/lib 中,后来在阅读了互联网上的大量帖子后,将 gcm-server.jar 添加到构建路径中。看来此操作可以修复它,但由于某种我不知道的原因,服务器上在更改之前留下了一些文件。我应该尝试清理我的项目,但我什至没有想到这是问题所在。无论如何,我希望这对某人有所帮助,因为我已经将在互联网上找到的所有信息浓缩到这篇文章中,并包含了我自己的困境和解决方案。
关于jersey - GCM : java. lang.NoClassDefFoundError:com/google/android/gcm/server/Sender,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13355446/