2010-09-26 16 views
23

Sto cercando di utilizzare Guava in un progetto GWT senza successo (un HashMultimap, per essere precisi). Ottengo una lista infinita di stacktraces per le classi:Guava r07, GWT e javax.annotation.Nullable

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

Ogni traccia dello stack è lungo le linee di:

  • linea xx: il javax.annotation importazione non può essere risolto
  • linea xx: Nullable non può essere risolto a un tipo
  • linea xx: Nullable non può essere risolto a un tipo
  • linea xx: Nullable non può essere risolto a un tipo
  • ...

Guardando il codice, ogni file che genera un errore comprende:

importazione javax.annota tion.Nullable;

e, guardando il guava-src-r07.jar, ciascuno classi menzionate utilizza un'annotazione @Nullable.

Sto usando JDK6 e sto guardando il javadoc JDK6 e ... beh, non riesco a trovare nessuna annotazione del genere. Posso far funzionare queste librerie con un progetto GWT e JDK6?

P.S. - Quale versione di Java stai usando?

+3

Sei assolutamente sicuro che il 100% NON debba assolutamente andare a caccia di un barattolo jsr305! guava-gwt.jar dovrebbe funzionare appena per te, quindi ti preghiamo di fornire dettagli su cosa stai provando esattamente e cosa sta succedendo; "Ricevo un elenco di tracce dello stack": da cosa esattamente? –

+0

@Kevin, Quando faccio la stessa cosa, e provo a compilare, ottengo: Compilazione modulo com.restphone.LingoGwt Convalida unità appena compilate [ERRORE] Errori in 'jar: file:/Users/james/lib/guava -r08/guava-r08-gwt.jar! /com/google/common/base/Equivalence.java ' [ERRORE] Riga 20: impossibile importare javax.annotation [ERRORE] Riga 51: Nullable non può essere risolto a un tipo [ERRORE] Riga 51: Nullable non può essere risolto in un tipo [ERRORE] Riga 60: Nullable non può essere risolto in un tipo –

+2

Segnalato come un bug: http://code.google.com/p/guava -libraries/issues/detail? id = 586 –

risposta

14

Hum ... Penso che sia il jsr305 che stai cercando. Date un'occhiata a

http://www.findjar.com/jar/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar.html

Deve essere meglio qui: http://code.google.com/p/guava-libraries/source/browse/#svn/trunk/lib dove vedo l'annotazione @Nullable

+7

+1: È ancora una domanda fastidiosa: qual è il modo a prova di futuro per integrare il contenuto di JSR-305 nei progetti di oggi, data la mancanza di progressi apparenti? – andersoj

+0

Vedere l'altra risposta per una soluzione parziale. – Blaisorblade

12

Come scritto sopra, il problema sembra essere risolto quando si utilizza guava 10.0.1, che ha una dipendenza aggiuntiva dalla libreria JSR305.

In alternativa, l'ID della libreria mancante da aggiungere a Maven è com.google.code.findbugs:jsr305:1.3.9, pertanto la configurazione della build deve essere risolta aggiungendo la seguente dipendenza a pom.xml nella posizione appropriata (avviso: non l'ho verificato):

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

Aggiornamento: @ips utente suggerito di aggiungere <scope>provided</scope> poiché il vaso JSR305 non è necessario in fase di esecuzione, e l'aggiornamento alla versione 2.0.1. So che il primo cambiamento ha senso, e suppongo che anche l'aggiornamento della versione. Nella mia esperienza, usare <scope>provided</scope> ha creato problemi per Scala, ma questo è un problema separato.

5

È necessario ottenere il JSR 305 JAR, ma in aggiunta, è necessario includere il codice sorgente di annotazione @Nullable come cibo per il compilatore GWT.

Assumendo che il progetto è in fase com/example/myproject/ Creare un file: com/example/myproject/annotation/javax/annotation/Nullable.java con il seguente contenuto:

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 { 

} 

Aggiungere la riga al MyProject.gwt.xml:

<super-source path="annotation"/> 

e siete pronti ad andare.

+0

grazie, che mi è piaciuto per me ... ora controlla se valeva il truble ^^ – Stefan

+0

Ho appena dovuto un file javax.annotation.Annotation.gwt.xml con: ' ' e naturalmente ereditare questo nel mio progetto .gwt.xml file. Hai ottenuto questo trucco da [qui] (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