Guava r07, GWT y javax.annotation.Nullable
(3)
Como se describió anteriormente, el problema parece estar resuelto cuando se usa guava 10.0.1, que tiene una dependencia adicional en la biblioteca JSR305.
Alternativamente, el ID de la biblioteca que falta para agregar a Maven es com.google.code.findbugs:jsr305:1.3.9
, por lo que la configuración de compilación debe com.google.code.findbugs:jsr305:1.3.9
agregando la siguiente dependencia a pom.xml en el lugar apropiado (advertencia - No probé esto):
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>2.0.1</version>
<scope>provided</scope>
</dependency>
Actualización: el usuario @ips sugirió que se agregue <scope>provided</scope>
ya que el jsr305 jar no es necesario en el tiempo de ejecución y se actualiza a la versión 2.0.1
. Sé que el primer cambio tiene sentido, y creo que la actualización de la versión también lo tiene. En mi experiencia, el uso de <scope>provided</scope>
creó problemas para Scala, pero eso es un problema aparte.
Intento utilizar Guava en un proyecto de GWT sin éxito (un HashMultimap, para ser precisos). Obtengo una lista interminable de stacktraces para las clases:
- com.google.common.collect.ComparisonChain
- com.google.common.collect.ForwardingSortedSetMultimap
- com.google.common.collect.Ordering
- ...
Cada rastro de pila está en la línea de:
- línea xx: la importación javax.annotation no se puede resolver
- línea xx: Nullable no se puede resolver a un tipo
- línea xx: Nullable no se puede resolver a un tipo
- línea xx: Nullable no se puede resolver a un tipo
- ...
Al mirar el código, cada archivo que arroja un error incluye:
import javax.annotation.Nullable;
y, mirando el guava-src-r07.jar, cada clase mencionada usa una anotación @Nullable.
Estoy usando JDK6 y mirando el javadoc JDK6 y ... bueno, no puedo encontrar ninguna anotación. ¿Puedo hacer que estas bibliotecas trabajen con un proyecto GWT y JDK6?
PD: ¿Qué versión de Java estás usando allí?
Hum ... Creo que es el jsr305 que estás buscando. Echa un vistazo a
http://www.findjar.com/jar/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar.html
Debe ser mejor aquí: http://code.google.com/p/guava-libraries/source/browse/#svn/trunk/lib donde veo la anotación @Nullable
Necesita obtener JSR 305 JAR, pero además, debe incluir el código fuente de anotación @Nullable
como alimento para el compilador GWT.
Suponiendo que su proyecto está en com/example/myproject/
Cree un archivo: com/example/myproject/annotation/javax/annotation/Nullable.java
Con el siguiente contenido:
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 {
}
Agregue la línea a MyProject.gwt.xml
:
<super-source path="annotation"/>
Y estás listo para ir.