Come ClientBundle in GWT?
-
27-09-2019 - |
Domanda
Sto usando GWT ClientBundle per la prima volta. Ho scritto interfaccia che estende ed ecco il codice:
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();
}
La mia domanda è: come faccio a dire esattamente dove queste risorse (immagini in questo caso) può essere trovato. Devo metterli: a) nella stessa directory come interfaccia - (brutto)? b) in una directory specifica che non può essere cambiato? c) nella directory che voglio, ma ci dovrebbe essere il meccanismo per specificare esso - (sarebbe grande)
?Grazie.
Soluzione
Io di solito creare un nuovo pacchetto per le risorse (com.example.project.resource
) e mettere l'interfaccia ClientBundle
e le risorse adeguate lì (insieme, come in in una directory) - è un file java, più una serie di immagini, senza bisogno di ulteriore separazione, IMHO.
Per quanto riguarda i percorsi per le risorse - è possibile passarli via @Source("path")
annotazione. Per esempio, se avete la vostra interfaccia ClientBundle
in com.example.project.resource
e le immagini in com.example.project.images
, allora devi scrivere @Source("../images/shim.gif")
. Probabilmente si potrebbe usare percorsi assoluti, ma assicuratevi di metterle in una variabile statica e condividere tra la risorsa, in modo che possa essere facilmente ignorata;)
Altri suggerimenti
Simile a punti di Igor:
com.yoursite.resources: YourClientBundle.java
com.yoursite.resources.css: YourCssResource.java
com.yoursite.resources.images: image files here
La chiave qui è che se non si consumano una risorsa (CSS / immagine / testo), il compilatore GWT lo ignorerà. Questo impedisce guerra gonfiare come applicazione diventa titolare e hai centinaia di immagini e non sono sicuro che vengono utilizzati e quali non lo sono.
Se si utilizza l'opzione di far cadere tutto in pubblici / immagini cartella, quindi tutti gli elementi saranno inclusi nella vostra guerra applicazione, indipendentemente dal fatto che sono abituati.