gpt4 book ai didi

java - 使用 sbt 测试 Guava 代码时出现 IncompatibleClassChangeError

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:12:23 24 4
gpt4 key购买 nike

我有一个使用 maven 和 sbt 的 Java 1.6 + Scala 2.9.2 项目。当我添加 Guava 缓存类时,该项目开始在测试中抛出此异常:

java.lang.IncompatibleClassChangeError: 
class com.google.common.cache.CacheBuilder$3 has interface
com.google.common.base.Ticker as super class

执行 sbt clean compile 工作完美,但 sbt clean test 抛出此异常。

guava的版本是13.0

引发异常的模块有:

import com.google.common.cache.{CacheBuilder, Cache}
...
val cache: Cache[String, Integer] = CacheBuilder.newBuilder()
.maximumSize(5000).build()

我的 sbt 依赖项是:

libraryDependencies ++= Seq(
"org.scala-tools.testing" %% "scalacheck" % "1.9" % "test" changing(),
"org.specs2" %% "specs2" % "1.9" % "test"
)

maven 依赖项是:

<dependencies>
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version>0.8.0</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>13.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.0.0</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_2.9.1</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.novocode</groupId>
<artifactId>junit-interface</artifactId>
<version>0.8</version>
<scope>test</scope>
</dependency>
</dependencies>

最佳答案

在 Guava 13 之前,Ticker 从接口(interface)变成了抽象类。

这发生在测试中而不是编译中这一事实是一个很好的指标。

我认为早期版本的 Guava 最终会出现在您的测试类路径中,可能作为传递依赖项。

您可以尝试使用 sbt-inspectr探索测试类路径并找到更多信息,或者您可以尝试排除,例如:

"org.scala-tools.testing" %% "scalacheck" % "1.9" % "test" changing(), excludeAll(
ExclusionRule(organization = "com.google.guava")
)

关于java - 使用 sbt 测试 Guava 代码时出现 IncompatibleClassChangeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12007523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com