Подтвердить что ты не робот

Зачем мне jsr305 использовать guava в scala?

У меня есть следующий scala файл:

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

Я компилирую с guava-11.0.2.jar в пути к классам. Мой компилятор scala 2.9.1 (как плагин eclipse, так и plain 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 для использования с guava?

Спасибо! - Георг

4b9b3361

Ответ 1

Что из-за того, как был разработан компилятор Scala, он требует, чтобы все типы, открытые классом, были доступны во время компиляции, тогда как компилятору Java фактически все равно.

Ответ 2

Шон Парсонс ответил на ваш первый вопрос, объяснив, почему Scala требует зависимости JSR 305.

Что касается "официальной" реализации JSR 305 для использования с Guava, я бы использовал ту, которую они объявляют в pom.xml:

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

Если вы использовали Maven, я думаю, что он автоматически добавит зависимость к пути к классам.

Примечание: вы можете загрузить банку непосредственно из репозитория Maven Central.

Ответ 3

Вы можете добавить эту зависимость:

<dependency>
    <groupId>com.google.code.findbugs</groupId>
    <artifactId>jsr305</artifactId>
    <version>2.0.3</version>
    <scope>provided</scope>
</dependency>

таким образом, компиляция будет работать, и это не придет к окончательной версии.