Guava r07, GWT и javax.annotation.Nullable - PullRequest
       7

Guava r07, GWT и javax.annotation.Nullable

23 голосов
/ 27 сентября 2010

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

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

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

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

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

import javax.annotation.Nullable;

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

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

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

Ответы [ 3 ]

14 голосов
/ 27 сентября 2010

Хм ... Я думаю, что вы ищете 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

12 голосов
/ 17 ноября 2011

Как написано выше, проблема, кажется, решена при использовании 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>, так как jar jsr305 не требуется во время выполнения, и обновление до версии 2.0.1. Я знаю, что первое изменение имеет смысл, и я думаю, что обновление версии также имеет значение. По моему опыту, использование <scope>provided</scope> создало проблемы для Scala, но это отдельная проблема.

5 голосов
/ 17 декабря 2011

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

Предполагается, что ваш проект находится под com/example/myproject/file: 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"/>

И все готово.

...