2011-10-19 10 views
7

Czy obsługiwane są Predicate i Function w GWT 2.4.0 i Guava GWT 10.0.1? Oba interfejsy są oznaczone jako @GwtCompatible.Używanie interfejsów Predykaty i funkcje Guava 10 z GWT 2.4.0

Po uruchomieniu projektu w trybie debugowania gospodarzem, otrzymuję błędy sprawdzania poprawności run-czas w zastosowaniach Predicate:

[Błąd] [myproject] - Line XXY: import javax.annotation.Nullable nie mogą być rozwiązane

[ERROR] [myproject] - Line YYY: Nullable nie mogą być rozwiązane do rodzaju

z innych stanowisk StackOverflow, wierzę, że te błędy nie powinny wymagać wł udając JSR 305 na ścieżce, jak w Guava w wersji 09 (w tym JSR 305 na ścieżce nie naprawił problemu, w każdym razie).

Ja również wydają się otrzymać interfejs para błędy niedopasowania:

[ERROR] [myproject] - Linia XXX: Typ nowy function() {} muszą wdrożyć odziedziczony abstrakcyjne metodę Function.apply (Object)

[błąd] [myProject] - Linia YYY: metoda zastosowania (MyType) typu nowego Function() {} należy zastąpić lub implementują supertypem sposób

i podobne błędy w zastosowaniach Predicate, które zgłosiłem jako błąd: http://code.google.com/p/guava-libraries/issues/detail?id=765

Jakieś pomysły, co może być nie tak z moją konfiguracją?

Moja Projekt plik .gwt.xml zawiera następujące wiersze:

<inherits name="com.google.common.collect.Collect" /> 
<inherits name="com.google.common.base.Base" /> 

Mój plik java zawiera następujące Import:

import com.google.common.base.Function; 
import com.google.common.base.Predicate; 

Używam Eclipse 3.7.1 i JavaSE- 1.6

+1

Który JAR zawierasz w swoim projekcie webapp? 'guava-10.0.1.jar' lub' guava-gwt-10.0.1.jar'? – Strelok

+0

@Strelok: oba są w stanie wojny/WEB-INF/lib, a ścieżka budowania projektu (jako zewnętrzne JAR) –

+0

Funkcja i predykat są używane w transformacji i filtrowaniu. Sprawdź te produkty importowane. Miałem problem z niedopasowanymi metodami, ponieważ Transform pochodził skądś nieudolnie, zamiast z google.common. –

Odpowiedz

0

To jest rodzaj known bug musisz mieć jsr305.jar w swoim WEB-INF/lib to jest to.

Inną rzeczą, na którą trzeba zwrócić uwagę, jest fakt, że części guawy są pakowane po stronie GWT * .jar, ale tam są umieszczane w osobnym pakiecie com.google.gwt.thirdparty.guava.common ..... I jak to często bywa w przypadku zaćmienia, jest to, że podczas rozpoznawania importu pobiera niewłaściwy import i powoduje to bałagan w czasie wykonywania, ponieważ klasy zapakowane w com.google.gwt.thirdparty.guava są z innej wersji i NIE MOGĄ być odwoływane.

Moja rada:

Do wyszukiwania tekstu na wszystkie pliki * .java dla „thirdparty” podciągu i zastąpić go poprawnego importu - pracował dla mnie.

Nieco głębsze wytłumaczenie jest takie, że w poprzednich wersjach Guawy jsr305 był zawarty w słoiku z guawą, ale w tym wydaniu zostały one usunięte, a zależność od niego pojawia się w Maven pom z biblioteki, ale nie została dobrze udokumentowana Strona internetowa. Spowodowało to wiele zamieszania wśród użytkowników.

2

Po prostu miałem ten sam problem i znalazłem rozwiązanie tego problemu. Problem polega na tym, że kod źródłowy JSR 305 nie jest częścią modułu GWT i dlatego jest ignorowany przez GWT. Aby to naprawić, wykonaj następujące czynności:

  • Dodaj deskryptor modułu GWT do pliku jsr305-2.0.0.jar. Wewnątrz słoika, który powinien zawierać co najmniej źródła Java w podfolderze javax/annotation dodać plik Annotation.gwt.xml o następującej treści:
<?xml version="1.0" encoding="UTF-8"?> 
<module> 
    <source path="" /> 
</module> 
  • Dodaj zmodyfikowany jsr305-2.0.0.jar do ścieżki klasowej projektu GWT w czasie zaćmienia. Choć stwierdzono gdzie indziej jest nie requiered dodać ten słoik do WEB-INF/lib

  • Niech moduły Twojego projektu dziedziczą z nowo utworzonego modułu GWT dodając następującą linię do modułów: męska .gwt.xml pliki:

<inherits name='javax.annotation.Annotation'/> 

To wszystko! Teraz Twój projekt zaćmienie zakończy się pomyślnie, a tryb deweloperski/hostowany będzie działać.