首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >com.google.common.base.Stopwatch.createStarted()Lcom/google/common/base/Stopwatch :NoSuchMethodError

com.google.common.base.Stopwatch.createStarted()Lcom/google/common/base/Stopwatch :NoSuchMethodError
EN

Stack Overflow用户
提问于 2015-03-04 13:20:56
回答 6查看 12.2K关注 0票数 7

我的应用程序正在抛出NoSuchMethodError: com.google.common.base.Stopwatch.createStarted()Lcom/google/common/base/Stopwatch错误。不知道为什么,因为16.0.1确实包含这个类,我已经检查过了。据我所研究,这好像是个虫子?

我也有这段代码供参考,尽管我认为这不是问题所在:

代码语言:javascript
复制
    FirewallRule rule = new PeriodicFirewallCounterRule(60, TimeUnit.SECONDS, new IpAddressCountingPolicy());
    ((PeriodicFirewallCounterRule)rule).addHandler(new RateLimitationHandler(new UniqueLimitPolicy(10)));
    FirewallFilter firewallFiler = new FirewallFilter(getContext(), list(rule));
    firewallFiler.setNext(ma);

我的应用程序正在使用Restlet APISpark:

代码语言:javascript
复制
  <dependency>
      <groupId>org.restlet.gae</groupId>
      <artifactId>org.restlet.ext.apispark</artifactId>
      <version>${version.restlet}</version>
  </dependency>

在运行和访问应用程序的REST时,它会引发以下错误:

代码语言:javascript
复制
[INFO] Caused by: java.lang.NoSuchMethodError: com.google.common.base.Stopwatch.createStarted()Lcom/google/common/base/Stopwatch;
[INFO]  at org.restlet.ext.apispark.internal.firewall.rule.counter.PeriodicCounter.<init>(PeriodicCounter.java:65)
[INFO]  at org.restlet.ext.apispark.internal.firewall.rule.PeriodicFirewallCounterRule$1.load(PeriodicFirewallCounterRule.java:86)
[INFO]  at org.restlet.ext.apispark.internal.firewall.rule.PeriodicFirewallCounterRule$1.load(PeriodicFirewallCounterRule.java:84)
[INFO]  at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3599)
[INFO]  at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2379)
[INFO]  at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2342)
[INFO]  at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2257)
[INFO]  ... 74 more
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-03-05 08:59:25

使用扩展org.restlet.ext.apispark时,检索到的番石榴依赖项具有版本16.0.1

代码语言:javascript
复制
Downloading: http://maven.restlet.com/com/google/guava/guava/16.0.1/guava-16.0.1.jar
Downloading: http://repo.maven.apache.org/maven2/com/google/guava/guava/16.0.1/guava-16.0.1.jar
Downloaded: http://repo.maven.apache.org/maven2/com/google/guava/guava/16.0.1/guava-16.0.1.jar (2176 KB at 711.7 KB/sec)

它位于一个从头创建的应用程序中,该应用程序具有以下maven配置:

代码语言:javascript
复制
<project (...)>
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.restlet</groupId>
    <artifactId>restlet-apispark-firewall</artifactId>
    <name>${project.artifactId}</name>
    <packaging>jar</packaging>
    <version>1.0.0-snapshot</version>

    <properties>
        <java-version>1.7</java-version>
        <restlet-version>2.3.1</restlet-version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.restlet.jse</groupId>
            <artifactId>org.restlet</artifactId>
            <version>${restlet-version}</version>
        </dependency>

        <dependency>
            <groupId>org.restlet.jse</groupId>
            <artifactId>org.restlet.ext.apispark</artifactId>
            <version>${restlet-version}</version>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>maven-restlet</id>
            <name>Public online Restlet repository</name>
            <url>http://maven.restlet.com</url>
        </repository>
    </repositories>
</project>

我集成了您的代码,它在我这边运行得很好。也不例外..。

我认为旧版本的番石榴来自另一种依赖。如果您使用Maven,您应该确定这个老番石榴版本来自何处,并可能在相应的依赖项中添加一个排除项。我希望它能解决你的问题。

希望这对你有帮助,蒂埃里

票数 5
EN

Stack Overflow用户

发布于 2015-03-06 12:51:04

这是修复错误的解决方案:

首先排除旧的Guava依赖项,然后:

代码语言:javascript
复制
  <dependency>
      <groupId>org.restlet.gae</groupId>
      <artifactId>org.restlet.ext.apispark</artifactId>
      <version>${version.restlet}</version>
      <exclusions>
          <exclusion>
              <groupId>com.fasterxml.jackson.core</groupId>
              <artifactId>jackson-databind</artifactId>
          </exclusion>
      </exclusions>
  </dependency>
  <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.5.1</version>
  </dependency>
票数 2
EN

Stack Overflow用户

发布于 2015-03-04 13:29:39

由该ClassLoader加载的类秒表不包含该方法,不确定是否像Jens所说的那样由多个不兼容的jars引起,或者仅仅是因为16.0.1实际上没有该方法。一个简单的检查是用javap或反编译器解析类:

代码语言:javascript
复制
javap -p Stopwatch.class

然后检查是否列出了该方法。

编辑:这个方法是从15.0开始的,所以我也会检查类路径的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28855559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档