19

次のscalaファイルがあります。

object SGuavaTryout {
  com.google.common.cache.CacheBuilder.newBuilder()
}

クラスパスに guava-11.0.2.jar でコンパイルします。私のscala 2.9.1コンパイラ(Eclipseプラグインとプレーンscalacの両方)は文句を言います:

error while loading CacheBuilder, Missing dependency 
  'class javax.annotation.CheckReturnValue', required by 
  D:\devel\eclipse-workspace\Scala Spielwiese\guava-11.0.2.jar
  (com/google/common/cache/CacheBuilder.class)

コンパイルするには、jsr305 (jsr305-1.3.9.jar) をビルド パスに追加する必要があります。同等の Java は、jsr305 なしで問題なくコンパイルされます。

public class JGuavaTryout {
  public void tryout() {
    com.google.common.cache.CacheBuilder.newBuilder();
  }
}

scala が jsr305 を必要とする理由はありますか? グアバで使用する公式の jsr305 実装はありますか?

ありがとう!- ゲオルグ

4

3 に答える 3

21

これは、Scala コンパイラーの設計方法によるもので、クラスによって公開されるすべての型がコンパイル時に使用可能である必要がありますが、Java コンパイラーは事実上気にしません。

于 2012-04-04T10:20:31.167 に答える
21

Sean Parsons は、Scala が JSR 305 依存関係を必要とする理由を説明することで、最初の質問に答えました。

Guava で使用する「公式の」JSR 305 実装に関しては、pom.xmlで宣言されているものを使用します。

<dependency>
    <groupId>com.google.code.findbugs</groupId>
    <artifactId>jsr305</artifactId>
    <version>1.3.9</version>
</dependency>

Maven を使用していた場合は、クラスパスに依存関係が自動的に追加されると思います。

注: jar はMaven Central リポジトリから直接ダウンロードできます。

于 2012-04-04T14:28:39.510 に答える