2010-09-26 9 views
23

Ich versuche, Guava in einem GWT-Projekt ohne Erfolg zu verwenden (ein HashMultimap, um genau zu sein). Ich erhalte eine nie endende Liste von stacktraces für Klassen:Guava r07, GWT und javax.annotation.Nullable

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

Jeder Stack-Trace ist entlang der Linien von:

  • Linie xx: der Import javax.annotation nicht
  • Linie xx aufgelöst werden: Nullable nicht auf eine Art gelöst werden können
  • Linie xx: Nullable kann nicht auf einen Typ
  • Linie xx aufgelöst werden: Nullable gelöst werden kann eine Art
  • ...

auf den Code der Suche, jede Datei, die einen Fehler wirft beinhaltet:

Import javax.annota tion.Nullable;

und, mit Blick auf die Guava-src-r07.jar, verwendet jede erwähnte Klasse eine @Nullable Annotation.

Ich benutze JDK6 und Blick auf die JDK6 Javadoc und ... nun, ich kann keine solche Annotation finden. Kann ich diese Bibliotheken mit einem GWT-Projekt und JDK6 arbeiten?

P.S. - Welche Version von Java benutzt du da drüben?

+3

Sie sind absolut positiv 100% sollten nicht selbst auf die Jagd nach einem jsr305 Glas gehen müssen! guava-gwt.jar sollte nur für Sie arbeiten, also geben Sie bitte Details darüber an, was genau Sie gerade versuchen und was gerade geschieht. "Ich bekomme eine Liste von Stack-Spuren" - woher genau? –

+0

@Kevin, Wenn ich das gleiche mache, und versuche zu kompilieren, bekomme ich: Kompilieren Modul com.restphone.LingoGwt Validierung neu kompilierte Einheiten [ERROR] Fehler in 'jar: file:/Benutzer/james/lib/guava -r08/guava-r08-gwt.jar! /com/google/common/base/Equivalence.java ' [FEHLER] Zeile 20: Der Import javax.annotation kann nicht aufgelöst werden [FEHLER] Zeile 51: Nullable kann nicht aufgelöst werden zu einem Typ [FEHLER] Zeile 51: Nullable kann nicht in einen Typ aufgelöst werden [FEHLER] Zeile 60: Nullable kann nicht in einen Typ –

+2

aufgelöst werden. Als Fehler gemeldet: http://code.google.com/p/guava -libraries/issues/detail? id = 586 –

Antwort

14

Hum ... Ich denke, es ist die jsr305, die Sie suchen. Werfen Sie einen Blick auf

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

Es muss hier besser sein: http://code.google.com/p/guava-libraries/source/browse/#svn/trunk/lib , wo ich die @Nullable Anmerkung siehe

+7

+1: Es ist immer noch eine ärgerliche Frage: Was ist der zukunftssichere Weg, JSR-305-Inhalte in die heutigen Projekte zu integrieren, angesichts der mangelnden Fortschritte? – andersoj

+0

Siehe die andere Antwort für eine Teillösung. – Blaisorblade

12

Wie oben geschrieben, das Problem gelöst zu sein scheint, wenn Guave 10.0.1 verwenden, die hat eine zusätzliche Abhängigkeit von der JSR305-Bibliothek.

Alternativ ist die ID der fehlenden Bibliothek, die Maven hinzugefügt werden soll, com.google.code.findbugs:jsr305:1.3.9, daher sollte die Build-Konfiguration korrigiert werden, indem die folgende Abhängigkeit zu pom.xml an der entsprechenden Stelle hinzugefügt wird (Warnung - Ich habe dies nicht getestet):

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

Update: Benutzer @ips vorgeschlagen Hinzufügen <scope>provided</scope> da die jsr305 jar nicht zur Laufzeit benötigt wird, und die Aktualisierung auf Version 2.0.1. Ich weiß, dass die erste Änderung sinnvoll ist, und ich denke, dass das Versions-Update auch tut. Meiner Erfahrung nach verursachte die Verwendung von <scope>provided</scope> Probleme für Scala, aber das ist ein separates Problem.

5

Sie müssen das JSR 305 JAR erhalten, aber zusätzlich müssen Sie den @Nullable Annotationsquellcode als Nahrung für den GWT-Compiler angeben.

Ihr Projekt Unter der Annahme ist unter com/example/myproject/ eine Datei erstellen: com/example/myproject/annotation/javax/annotation/Nullable.java mit folgendem Inhalt:

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 { 

} 

Fügen Sie die Zeile zu MyProject.gwt.xml:

<super-source path="annotation"/> 

Und du bist gut zu gehen.

+0

danke, das hat es für mich ... jetzt überprüfen wir, ob es die Trubel wert war ^^ – Stefan

+0

Ich musste nur eine javax.annotation.Annotation.gwt.xml Datei mit: ' ' und natürlich erben dies in der Datei .gwt.xml meiner Projekte. Haben Sie diesen Trick von [hier] (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