Как ClientBundle в GWT?
Я впервые использую GWT ClientBundle. Я написал интерфейс, который его расширяет и вот код:
package edu.etf.fuzzy.client.login;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.ImageResource;
public interface Resources extends ClientBundle {
@Source("logo_federacija.jpg")
ImageResource logo();
@Source("shim.gif")
ImageResource shim();
}
мой вопрос: Как я могу сказать, где именно эти ресурсы (изображения в этом случае) можно найти. Мне их поставить?: а) в том же каталоге, что и интерфейс - (уродливый)? b) в каком-то конкретном каталоге, который никогда не может быть изменен ? c) в каталоге, который я хочу, но должен быть механизм, чтобы указать его - (было бы здорово)?
спасибо.
2 ответов
обычно я создаю новый пакет для ресурсов (com.example.project.resource
) и поставить ClientBundle
интерфейс и соответствующие ресурсы там (вместе, как в одном каталоге) - это один файл java плюс куча изображений, нет необходимости в дальнейшем разделении, IMHO.
что касается путей к ресурсам-вы можете передать их через @Source("path")
Примечание. Например, если у вас есть ClientBundle
интерфейс com.example.project.resource
и изображений в com.example.project.images
, тогда ты напишешь @Source("../images/shim.gif")
. Возможно, вы могли бы использовать абсолютные пути, но убедитесь, что вы храните их в статической переменной и разделяете ресурс, поэтому его можно легко переопределить;)
похожие на очки Игоря:
com.yoursite.resources: YourClientBundle.java
com.yoursite.resources.css: YourCssResource.java
com.yoursite.resources.images: image files here
ключ здесь в том, что если вы не потребляете ресурс (CSS/Image/Text), компилятор GWT проигнорирует его. Это предотвращает наворотов войны как ваше приложение получает держатель и у вас есть сотни изображений и не уверены, какие используются, а какие нет.
Если вы используете опцию удаления всего в public / images папка, затем все элементы будут включены в вашу войну приложений, независимо от того, используются ли они.