2010-09-26 20 views
23

Intento utilizar Guava en un proyecto GWT sin éxito (un HashMultimap, para ser precisos). Consigo una lista interminable de stacktraces para las clases:Guava r07, GWT y javax.annotation.Nullable

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

Cada traza de la pila es a lo largo de las líneas de:

  • línea xx: la javax.annotation importación no se puede resolver
  • línea xx: Anulable no puede ser resuelto a un tipo
  • línea xx: Anulable no puede ser resuelto a un tipo
  • línea xx: Anulable no puede ser resuelto a un tipo
  • ...

Si examina el código, cada archivo que genera un error incluye: javax.annota

importación tion.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?

P.S. - ¿Qué versión de Java estás usando allí?

+3

¡Está absolutamente absolutamente 100% NO se supone que necesite salir a buscar una jarra jsr305 usted mismo! Se supone que guava-gwt.jar solo funciona para ti de la caja, por lo que debes proporcionar detalles sobre qué estás intentando exactamente y qué está sucediendo. "Obtengo una lista de rastros de pila": ¿de qué exactamente? –

+0

@Kevin, cuando hago lo mismo, y trato de compilar, obtengo: Módulo de compilación com.restphone.LingoGwt Validación de unidades recién compiladas [ERROR] Errores en 'jar: file:/Users/james/lib/guava -r08/guava-r08-gwt.jar! /com/google/common/base/Equivalence.java ' [ERROR] Línea 20: La importación javax.annotation no se puede resolver [ERROR] Línea 51: Nullable no se puede resolver a un tipo [ERROR] Línea 51: Nullable no se puede resolver a un tipo [ERROR] Línea 60: Nullable no se puede resolver a un tipo –

+2

Reportado como un error: http://code.google.com/p/guava -libraries/issues/detail? id = 586 –

Respuesta

14

Hum ... Creo que es el jsr305 que estás buscando. Echar 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

+7

+1: Todavía es una pregunta molesta: ¿Cuál es la forma a prueba de futuro de integrar el contenido JSR-305 en los proyectos actuales, dada la falta de progreso aparente? – andersoj

+0

Vea la otra respuesta para una solución parcial. – Blaisorblade

12

lo escrito anteriormente, el problema parece estar resuelto al utilizar la guayaba 10.0.1, la cual tiene una dependencia adicional en la biblioteca JSR305.

Alternativamente, el ID de la biblioteca faltante para agregar a Maven es com.google.code.findbugs:jsr305:1.3.9, por lo que la configuración de compilación debe repararse agregando la siguiente dependencia a pom.xml en el lugar apropiado (advertencia: no lo he probado):

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

actualización: @ips usuario sugirieron añadir <scope>provided</scope> desde el frasco JSR305 no es necesario en tiempo de ejecución, y la actualización 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.

5

Necesita obtener el JAR JSR 305, pero además, debe incluir el código fuente de anotación @Nullable como alimento para el compilador GWT.

Asumiendo que su proyecto está en com/example/myproject/ Crear 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 { 

} 

Añadir a la línea MyProject.gwt.xml:

<super-source path="annotation"/> 

y ya está bueno para ir.

+0

gracias, eso lo sopló para mí ... ahora veamos si valió la pena el truble ^^ – Stefan

+0

Sólo tuve que hacer una javax.annotation.Annotation.gwt.xml file with: ' ' y, por supuesto, heredar esto en el archivo de mis proyectos .gwt.xml. Tiene este truco desde [aquí] (https://code.google.com/p/guava-libraries/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Package%20Summary&groupby=&sort = & id = 776) – Roger