Подтвердить что ты не робот

Как 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();
}

Мой вопрос: как узнать, где именно находятся эти ресурсы (изображения в этом случае). Должен ли я их поставить: a) в том же каталоге, что и интерфейс - (уродливый)? b) в каком-то конкретном каталоге, который никогда не может быть изменен? c) в каталоге, который я хочу, но должен быть механизм для его указания - (было бы здорово)?

Спасибо.

4b9b3361

Ответ 1

Я обычно создаю новый пакет для ресурсов (com.example.project.resource) и размещаю интерфейс ClientBundle и соответствующие ресурсы там (вместе, как и в одном каталоге) - это один java файл плюс куча изображений, не нужно для дальнейшего ветки, ИМХО.

Что касается путей к ресурсам - вы можете передать их через аннотацию @Source("path"). Например, если у вас есть интерфейс ClientBundle в com.example.project.resource и изображения в com.example.project.images, вы должны написать @Source("../images/shim.gif"). Вы, вероятно, могли бы использовать абсолютные пути, но убедитесь, что вы храните их в статической переменной и делитесь между ресурсами, поэтому ее можно легко переопределить;)

Ответ 2

Аналогично Игорю:

com.yoursite.resources: YourClientBundle.java
com.yoursite.resources.css: YourCssResource.java
com.yoursite.resources.images: image files here

Ключевым моментом здесь является то, что если вы не потребляете ресурс (CSS/Image/Text), компилятор GWT проигнорирует его. Это предотвращает раздувание войны, поскольку ваше приложение получает держатель, и у вас есть сотни изображений и не уверены, какие из них используются, а какие нет.

Если вы используете возможность удаления всего в папке public/images, все элементы будут включены в вашу войну с приложением, независимо от того, используются ли они.