гуава, gwt и затмение

Можно ли использовать гуаву в клиентском коде веб-приложения gwt? Если да, то как добавить гуаву в проект Eclipse?

Я добавил jar-файлы guava-10.0.1 и guava-gwt-10.0.1 в свой путь сборки и добавил исходные вложения к каждому, но я все еще получаю эту ошибку:

Исходный код для типа com.google.gwt. ThirdParty.Guava.common.base.Predicate недоступен; вы забыли наследовать необходимый модуль


person randusr836    schedule 17.10.2011    source источник


Ответы (2)


Хорошо, посмотрите на свою строку импорта. Это выглядит так?

import com.google.gwt.thirdparty.guava.common.base.Predicate;

Это неверно. Измените его на:

import com.google.common.base.Predicate;

Если вы пользуетесь помощником по завершению в Eclipse -- Control-Пробел -- изучите список предлагаемых дополнений. Не выбирайте только первое. Посмотрите вправо, где светло-серым текстом будет указан источник завершения. Если вы смотрите на файл ThirdParty.guava, переходите к следующему, пока не увидите файл google.common.

Может быть, кто-то может дать некоторое представление о том, для чего используется библиотека ThirdParty.guava, должна ли она быть в пути сборки и в каком порядке библиотеки Guava должны появляться в типичном проекте GWT.

person Steve J    schedule 17.10.2011
comment
thirdparty.guava — это переработанная версия Guava (и старая), используемая внутри GWT. Это рекомендуемый способ использования Guava в ваших проектах (перебазирование), чтобы не страдать от конфликтов версий (он же ад пути к классам). Вы можете настроить Eclipse для внесения пакета в черный список для автозаполнения: Java → Внешний вид → Фильтры типов, добавьте com.google.gwt.thirdparth.* (вы также можете добавить java.awt.*) - person Thomas Broyer; 17.10.2011
comment
Ооо, в черный список. Очень круто. Всегда есть чему поучиться. - person Steve J; 17.10.2011
comment
Вы также должны включить <inherit name="com.google.common.base.Base" /> в свой gwt.xml (и аналогично для других модулей в Guava: Collect, Primitives) - person Thomas Broyer; 17.10.2011
comment
Теперь я изменил строку импорта на com.google.common.base.Predicate; и добавил строку «наследовать» в мой файл gwt.xml, но теперь получаю сообщение об ошибке: невозможно найти «com/google/common/base/Predicate.gwt.xml» в вашем пути к классам. Я добавил исходные банки в качестве исходного приложения в Eclipse к каждой из банок гуавы, но безрезультатно. - person randusr836; 17.10.2011
comment
Никто не сказал добавить <inherit name="com.google.common.base.Predicate" /> Зачем ты это сделал? - person Ray; 17.10.2011
comment
Спасибо, это был мой косяк! Я получил кучу ошибок, например. Импорт javax.annotation.Nullable не может быть разрешен. Я добавил jsr305.jar в свой путь к классам, и теперь все работает. Всем спасибо. - person randusr836; 18.10.2011
comment
@cjr: у меня такая же / похожая проблема. С какой версией Guava GWT вы работали с Predicates? - person Todd Schiller; 19.10.2011

Классы Guava, совместимые с GWT, помечены (предполагается) аннотацией @GwtCompatible. Проверьте источник.

В соответствии с этим это: http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/base/Predicate.html

Вам по-прежнему нужно будет следовать инструкциям Томаса Бройера, чтобы поместить правильное значение в файл .gwt.xml.

person Jason    schedule 17.10.2011
comment
Я добавил все вышеперечисленные пункты, но теперь получаю сообщение об ошибке: Не удалось найти «com/google/common/base/Predicate.gwt.xml» в вашем пути к классам. Я добавил исходные банки в качестве исходного приложения в Eclipse к каждой из банок гуавы, но безрезультатно. - person randusr836; 17.10.2011
comment
Глупый вопрос: есть ли в вашем пути к классам соответствующие бинарные банки guava? - person Jason; 19.10.2011