2010-08-10 1 views
20

Я использую GWT ClientBundle в первый раз. Я написал интерфейс, который расширяет его и здесь есть код:Как скомпилировать клиент в GWT?

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) в каталоге, который я хочу, но должен быть механизм для его указания - (было бы замечательно)?

спасибо.

ответ

24

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

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

+0

Независимо от того, как я пытаюсь, я получаю: Метод synchronous() из типа Resources относится к отсутствующему типу TextResource – miroslavign

+0

@miroslavign: пожалуйста, откройте новый вопрос, раздел комментариев не является местом для устранения неполадок новых проблем. –

3

Подобно точкам Игоря:

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

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

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