Como fazer ClientBundle no GWT?
-
27-09-2019 - |
Pergunta
Estou usando o GWT ClientBundle pela primeira vez.Eu escrevi uma interface que a estende e aqui está o código:
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();
}
Minha pergunta é:Como posso saber exatamente onde esses recursos (imagens, neste caso) podem ser encontrados.Devo colocá-los:a) no mesmo diretório da interface - (feio)?b) em algum diretório específico que nunca pode ser alterado?c) no diretório que eu quero, mas deveria haver mecanismo para especificá-lo - (seria ótimo)?
Obrigado.
Solução
Eu geralmente crio um novo pacote para recursos (com.example.project.resource
) e colocar o ClientBundle
Interface e os recursos apropriados lá (juntos, como em um diretório) - é um arquivo java mais um monte de imagens, sem necessidade de maior separação, IMHO.
Quanto aos caminhos para os recursos - você pode passá -los via @Source("path")
anotação. Por exemplo, se você tem o seu ClientBundle
interface em com.example.project.resource
e imagens em com.example.project.images
, então você escreveria @Source("../images/shim.gif")
. Você provavelmente poderia usar caminhos absolutos, mas certifique -se de armazená -los em uma variável estática e compartilhar entre o recurso, para que possa ser facilmente substituído;)
Outras dicas
Semelhante aos pontos de Igor:
com.yoursite.resources: YourClientBundle.java
com.yoursite.resources.css: YourCssResource.java
com.yoursite.resources.images: image files here
A chave aqui é que se você não consumir um recurso (CSS/Imagem/Texto), o compilador GWT irá ignorá-lo.Isso impede inchaço de guerra conforme seu aplicativo ganha suporte e você tem centenas de imagens e não tem certeza de quais são usadas e quais não são.
Se você usar a opção de largar tudo no público/imagens pasta, todos os itens serão incluídos em seu aplicativo war, independentemente de serem usados.