【问题标题】:GCM: java.lang.NoClassDefFoundError: com/google/android/gcm/server/SenderGCM:java.lang.NoClassDefFoundError:com/google/android/gcm/server/Sender
【发布时间】:2012-11-13 04:06:25
【问题描述】:

我一直在尝试让 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 密钥。我知道它有效,因为我能够通过运行本教程中解释的 ant 命令使演示工作。也只是为了在模棱两可的情况下具体说明,我得到的错误是服务器端的,与android设备无关。

我已经尝试过的事情:

  1. 我已将 gcm-server.jar 包含在我的 WEB-INF/lib 文件夹中,并在项目属性下将它包含在构建路径中。
  2. 正如在其他网站上提到的,我也尝试过包含 json_simple-1.1.jar,就像包含 gcm-server.jar 一样。我不知道这会如何影响这个错误,但我看到它在几个不同的地方被列为答案。
  3. (解决方案) 删除了tomcat服务器并创建了一个新的。我可能只是清理了项目并获得了相同的结果。

演示教程链接:http://developer.android.com/guide/google/gcm/demo.html.

【问题讨论】:

    标签: jersey noclassdeffounderror google-cloud-messaging


    【解决方案1】:

    我刚刚找到了解决问题的方法。无奈之下,我从 eclipse 中删除了旧的 Tomcat 服务器并创建了一个新服务器。当我再次运行该项目时,根本没有任何问题。当我第一次设置项目时,我将 jar 文件包含在 WEB-INF/lib 中,后来,在互联网上阅读了很多帖子后,将 gcm-server.jar 添加到构建路径中。看来此操作可以修复它,但由于某种我不知道的原因,在更改之前服务器上存在一些遗留文件。我应该尝试清理我的项目,但我什至没有想到这是问题所在。无论如何,我希望这对某人有所帮助,因为我已经将我在互联网上找到的所有信息都浓缩到了这篇文章中,并包含了我自己的困境和解决方案。

    【讨论】:

    • 我也有同样的问题,但简单的“清洁解决方案”对我没有帮助。我使用的是 Jetty,而不是 Tomcat。 gcm-server.jar 被引用并在构建路径中。任何人都知道 Jetty/Eclipse 在启动前在哪里发布战争文件,以便我可以验证 gcm-server.jar 是否实际部署?
    • 更新:我的解决方案中缺少 json_simple-1.1.jar
    • @Nilzor 你解开了一个大谜团!非常感谢!这让我疯了伙计!你拯救了我的一天! \o/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2013-08-14
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多