【问题标题】:NoSuchMethod error getting a gdata serviceNoSuchMethoderror 获取数据服务
【发布时间】:2012-03-02 14:53:19
【问题描述】:

我收到以下错误:

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.collect.ImmutableSet.of([Ljava/lang/Object;)Lcom/google/common/collect/ImmutableSet;
at com.google.gdata.wireformats.AltFormat$Builder.setAcceptableTypes(AltFormat.java:399)
at com.google.gdata.wireformats.AltFormat$Builder.setAcceptableXmlTypes(AltFormat.java:387)
at com.google.gdata.wireformats.AltFormat.<clinit>(AltFormat.java:49)
at com.google.gdata.client.Service.<clinit>(Service.java:558)
at testproject.TestProject.run(TestProject.java:22)
at testproject.TestProject.main(TestProject.java:31)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

这来自以下代码:

package testproject;

import com.google.gdata.client.youtube.YouTubeService;
import com.google.gdata.util.*;
import java.util.logging.*;

public class TestProject {

  public static void main(String[] args) {
    try {
      YouTubeService service = new YouTubeService("Test", "developerKey");
      service.setUserCredentials("root@gmail.com", "pa$$word");
    } catch (AuthenticationException ex) {
      Logger.getLogger(TestProject.class.getName()).log(Level.SEVERE, null, ex);
    }
  }
}

起初,我将每个库都包含在 http://code.google.com/p/gdata-java-client/downloads/list 中,并且还导入了比我需要的更多的库。 我已经删除了我认为不必要的库(感谢thinksteep)。所以我目前包含的库是以下库:

mail.jar
activation.jar
ant.jar
gdata-core-1.0.jar
gdata-media-1.0.jar
guava-11.0.1.jar
gdata-youtube-2.0.jar
gdata-youtube-met-2.0.jar

(那里可能有一些不需要的库......但我已经走到了尽头......) 我只是想测试一下获得 YouTube 服务,这样我就可以让这个项目继续下去,但没有骰子。哦,我还包含了这个库:http://code.google.com/p/guava-libraries,因为在我收到 NoClassDefFound 错误之前,包含该库似乎可以解决它。提前感谢您的帮助! 哦,我也完全按照 gdata getting started guide 中的每一步(或者至少我认为是这样)。最后我的测试构建成功了...再次感谢!

【问题讨论】:

    标签: java service youtube gdata gdata-api


    【解决方案1】:

    添加超出要求的内容也可能会导致问题。 java.lang.NoSuchMethodError 错误通常发生在运行时找不到具有精确签名的所需方法的情况下。可能的原因有:

    1) There might be mulitple jars with same code, which may cause wrong class get loaded.
    
    2) Incompatable version of jar, the jar you have in classpath might be older version/newer version.
    

    确保这些情况都不会发生。

    【讨论】:

    • 感谢您的回复。我仍然收到错误消息。我删除了所有我认为不必要的罐子,并删除了所有不必要的导入并收到相同的错误。我更新了帖子以反映代码现在的样子。
    • 检查此链接,这似乎与番石榴库相矛盾。 code.google.com/p/gdata-java-client/issues/detail?id=344
    • 这正是我的问题!现在我只需要弄清楚他们的解决方案是什么意思...... Okris(在那个线程上)说:解决方案是顺便更改为 ImmutableSet.copyOf(E[] elements),但是我不确定这意味着我应该做什么。你能再指导我一步吗?感谢您的帮助!
    • 你能转移到较低版本的番石榴吗? 11 似乎你有这个问题。建议的代码更改可能是您的最佳选择。我觉得对您来说唯一的解决方法是使用较低版本的 Guava 并在 Gdata 项目中提出问题。
    • 我试一试...一秒
    【解决方案2】:

    最新版本的 gdata 仍然引用旧 guava 方法的问题

    退房 http://code.google.com/p/gdata-java-client/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Priority%20Milestone%20Owner%20Summary&groupby=&sort=&id=344

    解决方案

    我切换到 guava-r07.jar 位于 http://code.google.com/p/guava-libraries/downloads/detail?name=guava-r07.zip&can=4&q=

    这让我过去了 ContactsService 服务 = 新的 ContactsService("");

    正在使用的罐子:

    • 默认 Eclipse 插件 jar 的
    • gdata-base-1.0.jar
    • gdata-client-1.0.jar
    • gdata-contacts-3.0.jar
    • gdata-core-1.0.jar
    • gdata-media-1.0.jar
    • guava-r07.jar

    • Apache (servlet-api.jar)

    • JavaMail (mail.jar)
    • JavaBeans 激活框架 (activation.jar)

    【讨论】:

    【解决方案3】:

    我不知道它是否仍然相关,但我有同样的例外

    guava 11.02.jar(目前最新版本)有问题

    使用 guava-10.0.1(可以找到here)时一切顺利。

    【讨论】:

    【解决方案4】:

    所需的库 jar 如下。

    gdata-client-1.0.jar
    gdata-core-1.0.jar
    gdata-media-1.0.jar
    gdata-youtube-2.0.jar
    guava-11.0.2.jar
    java-mail-1.4.4.jar
    

    我正在使用上述库。请利用它;因为最终目的是获取 YouTubeService 对象。检查下面的代码 sn-p。

    package com.baba.test;
    /*
    * Author : Somanath Nanda
    */
    
    
    import java.net.MalformedURLException;
    import java.net.URL;
    import com.google.gdata.client.youtube.YouTubeQuery;
    import com.google.gdata.client.youtube.YouTubeService;
    public class Test {
    private static final String CLIENT_ID = "XXXXXXXX.XXXXX.XXX.XXX";
    private static final String DEVELOPER_KEY = "*********************************88";
    public static void main(String[] args) throws MalformedURLException {
    YouTubeService service = new YouTubeService(CLIENT_ID,DEVELOPER_KEY);
    System.out.println("Service : "+service);
    }
    

    【讨论】:

      【解决方案5】:

      如果您使用的是构建工具,例如 Maven,那么您可以简单地从我的 pom.xml 中的依赖项部分的一部分中执行类似于以下示例的操作:

      <!-- The mail dependency is required BEFORE the javaee-api dependency.
               The gdata dependency (YouTube API) requires the mail dependency. -->
          <dependency>
              <groupId>javax.mail</groupId>
              <artifactId>mail</artifactId>
              <version>1.4</version>
              <scope>provided</scope>
          </dependency>
          <dependency>
              <groupId>javax</groupId>
              <artifactId>javaee-api</artifactId>
              <version>6.0</version>
              <scope>provided</scope>
          </dependency>
          <dependency>
              <groupId>com.google.gdata</groupId>
              <artifactId>core</artifactId>
              <version>1.47.1</version>
          </dependency>
      

      【讨论】:

        【解决方案6】:

        我已将 googlecollection-exp.jar 添加到我的构建路径中,然后之前的执行消失了。

        【讨论】:

        • 您的意思是 NoSuchMethod 错误,对吗?您可能想对此进行一些扩展。你确定你得到的堆栈跟踪与问题中的相似吗?
        【解决方案7】:

        注意这个jar gdata-core-1.0.jar 我有同样的问题,我意识到这个jar gdata-core-1.0.jar 有问题,我从网站上找到了同一个jar gdata-core- 1.0.jar,但内容不同。更换新的gdata-core-1.0.jar后,问题解决了。

        所以说同名但内容不一样的jar就很棘手了。你以为你有罐子,实际上它不是正确的

        【讨论】:

          【解决方案8】:

          可能是您的某些 jar 会依赖于 google/guava jar,如果它们不在构建路径中,或者如果其中有多个,则可能会引发不一致,从而导致错误。一个快速的解决方案是在你的 pom 中添加最新版本的番石榴

           <dependency>
                  <groupId>com.google.guava</groupId>
                  <artifactId>guava</artifactId>
                  <version>24.0-jre</version>
              </dependency>
          

          现在检查依赖层次结构,如果除了 guava 之外的任何 Jar 引用任何其他旧 jar 的 guava/google-collections。如果是这样,那么排除它,像这样

          <exclusions>
                      <exclusion>
                          <groupId>com.google.collections</groupId>
                          <artifactId>google-collections</artifactId>
                      </exclusion>
           </exclusions>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-07-15
            • 2018-01-01
            • 2011-12-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-05-25
            相关资源
            最近更新 更多