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

Guava r07, GWT и javax.annotation.Nullable

Я пытаюсь использовать Guava в проекте GWT без успеха (точнее, HashMultimap). Я получаю бесконечный список стеков для классов:

  • com.google.common.collect.ComparisonChain
  • com.google.common.collect.ForwardingSortedSetMultimap
  • com.google.common.collect.Ordering
  • ...

Каждая трассировка стека проходит по строкам:

  • строка xx: импорт javax.nnation не может быть разрешен.
  • строка xx: Nullable не может быть разрешена для типа
  • строка xx: Nullable не может быть разрешена для типа
  • строка xx: Nullable не может быть разрешена для типа
  • ...

Посмотрев на код, каждый файл, который выдает ошибку, включает в себя:

import javax.annotation.Nullable;

и, глядя на guava-src-r07.jar, каждый упомянутый класс использует @Nullable аннотацию.

Я использую JDK6 и просматриваю javadoc JDK6 и... ну, я не могу найти такую ​​аннотацию. Могу ли я заставить эти библиотеки работать с проектом GWT и JDK6?

P.S. - Какую версию Java вы используете там?

4b9b3361

Ответ 2

Как указано выше, проблема, по-видимому, решена при использовании guava 10.0.1, которая имеет дополнительную зависимость от библиотеки JSR305.

В качестве альтернативы идентификатор отсутствующей библиотеки для добавления в Maven равен com.google.code.findbugs:jsr305:1.3.9, поэтому конфигурация сборки должна быть исправлена ​​путем добавления следующей зависимости к pom.xml в соответствующем месте (предупреждение - я не тестировал это)

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

Обновление. Пользователь @ips предложил добавить <scope>provided</scope>, поскольку jsr305 банку не требуется во время выполнения и обновление до версии 2.0.1. Я знаю, что первое изменение имеет смысл, и я предполагаю, что обновление версии также делает. По моему опыту, при использовании <scope>provided</scope> возникли проблемы для Scala, но это отдельная проблема.

Ответ 3

Вам нужно получить JAR 305 JAR, но кроме того, вам нужно включить исходный код аннотации @Nullable как пищу для компилятора GWT.

Предполагая, что ваш проект находится под com/example/myproject/ Создайте файл: com/example/myproject/annotation/javax/annotation/Nullable.java Со следующим содержанием:

package com.example.myproject.annotation.javax.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

import javax.annotation.Nonnull;
import javax.annotation.meta.TypeQualifierNickname;
import javax.annotation.meta.When;

@Documented
@TypeQualifierNickname
@Nonnull(when = When.UNKNOWN)
@Retention(RetentionPolicy.RUNTIME)
public @interface Nullable {

}

Добавьте строку в MyProject.gwt.xml:

<super-source path="annotation"/>

И тебе хорошо идти.