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 вы используете там?
Ответы
Ответ 1
Хм... Я думаю, что это jsr305, который вы ищете. Взгляните на
http://www.findjar.com/jar/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar.html
Здесь должно быть лучше: http://code.google.com/p/guava-libraries/source/browse/#svn/trunk/lib
где я вижу @Nullable аннотацию
Ответ 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"/>
И тебе хорошо идти.