3

Maven と sbt を使用した Java 1.6 + Scala 2.9.2 プロジェクトがあります。guava Cache クラスを追加すると、プロジェクトはテストでこの例外をスローし始めました。

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、この例外がスローされます。

グアバのバージョンは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>
4

1 に答える 1

1

Ticker は、Guava 13 より前にインターフェイスから抽象クラスに変更されました。

これがコンパイルではなくテストで発生するという事実は、良い指標です。

おそらく推移的な依存関係として、以前のバージョンの Guava がテスト クラスパスで終了していると思います。

sbt-inspectrを使用してテスト クラスパスを調べて詳細を調べるか、次のように除外してみることができます。

"org.scala-tools.testing" %% "scalacheck" % "1.9" % "test" changing(), excludeAll(
    ExclusionRule(organization = "com.google.guava")
)
于 2012-08-17T15:03:42.633 に答える