2011-08-31 8 views
6

Ho un progetto Web gwt, che deve utilizzare application.properties (sul lato client) caricato come TextResource nel codice. Tutto funziona bene, ma ora voglio centralizzare tutti i valori delle proprietà in maven pom.xml. Così ho fatto application.properties con segnaposto come key1 = $ {param1} e nella proprietà pom.xml i configurato param1ValueGWT non utilizza il file delle proprietà della risorsa dalla destinazione, ma la volta in src/main/resources. Come farlo con i segnaposto?

Quindi, quello che sta succedendo è che Maven sostituisce i segnaposto in application.properties nella directory di destinazione, ma sembra quel compilatore gwt usa il file application.properties da src/main/resources. Ho controllato i file js compilati e lì posso vedere che il segnaposto non viene sostituito con il suo valore dal pom.xml (l'applicazione target.properties è corretta).

UPDATE: Il problema è che, le proprietà del file che sto Filtering è un file di messaggi risorse fascio GWT e da quello che ho visto, Maven crea un "generato" una cartella e inserisce un file java generato in base alle proprietà file trovato nella cartella delle origini del progetto root e non nella cartella di destinazione. Dopo di ciò, lo incorpora nel file generale javascript. Ciò significa che ho due possibilità: 1) dire al plugin delle risorse per sovrascrivere il file delle proprietà che si trova nella cartella dei sorgenti (non mi piace, perché avrò problemi nel prossimo aggiornamento di subversion) 2) tell gwt- maven-plugin per cercare il file delle proprietà nella cartella target/classes che penso sia impossibile

Cosa ne pensi?

risposta

4

Ho risolto lo stesso problema utilizzando le risorse: copia-risorse di esecuzione e build-helper plug-in. In particolare, configurare il plugin risorse:

<plugin> 
    <artifactId>maven-resources-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>filter-sources</id> 
     <goals> 
      <goal>copy-resources</goal> 
     </goals> 
     <phase>generate-sources</phase> 
     <configuration> 
      <outputDirectory>${project.build.directory}/gwt-extra</outputDirectory> 
      <resources> 
      <resource> 
       <filtering>true</filtering> 
       <directory>src/main/filtered-sources</directory> 
      </resource> 
      </resources> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

e includerlo usando costruire aiutante:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.7</version> 
    <executions> 
     <execution> 
     <id>add-source-gwt</id> 
     <phase>generate-sources</phase> 
     <goals> 
      <goal>add-source</goal> 
     </goals> 
     <configuration> 
      <sources> 
      <source>${project.build.directory}/gwt-extra</source> 
      </sources> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
1

sono riuscito a utilizzare il filtro Maven sulle proprietà dei file utilizzati nella compilation GWT.
Uso l'interfaccia com.google.gwt.i18n.client.Constants.

Consente di instanziare un'interfaccia che estende Costanti, con metodi che restituiscono valori presi da un file di proprietà.
Il file delle proprietà può essere elaborato dal filtro Maven.

E 'davvero facile da fare:

  • dichiarare un'interfaccia che si estende Costanti: XxConstants
  • creare un file di proprietà XxConstants.properties in src/main/risorsa nello stesso pacchetto come l'interfaccia
  • Attiva filtro risorse Maven in modo che XxConstants.properties sia filtrato
  • quando GWT è in fase di compilazione (con gwt-maven-plugin), genererà un'istanza di XxConstants utilizzando il file delle proprietà filtrate.
  • nel codice gwt, creare un'istanza di XxConstants con GWT.creare o con iniezione di gin
  • chiamare i metodi per ottenere valori di proprietà

Un avvertimento: il filtro non funziona in modalità dev GWT

risultato può essere il check-in nella cartella target.generated fattosi sarà contenuta l'implementazione java dell'interfaccia con le proprietà filtrate utilizzate.

+3

Penso che tu abbia descritto il modo standard per utilizzare un file di costanti GWT, che per me e l'OP non funziona. Dov'è il trucco? – djjeck