2013-01-09 6 views
6

Attualmente, so come fare questo tipo di filtraggio usando Maven:Maven-properties-filtering-like per le annotazioni Java?

pom.xml

<properties> 
    <foo>bar</foo> 
</properties> 

app.properties

foo=${foo} 

ma è possibile fare quel tipo di filtro, usando Maven, Spring o qualsiasi altro strumento?

MyClass.java

@MyAnnotation("${foo}") // ${foo} should get replaced at compile time 
public void getData() { 
    return data; 
} 
+0

è possibile utilizzare il filtro delle risorse Maven sui file di origine nella fase generate-sources - posizionare i file * .java in una directory non di origine (meglio non utilizzare/risorse) e in tale fase copiarli sul file generato directory delle fonti – radai

+0

Ciò significherebbe che la tua annotazione dovrebbe avere un criterio di conservazione "SOURCE" per uno. E vuoi patchare il codice sorgente per l'avvio? Buona fortuna: p – fge

risposta

7

Hai provato a usare l'esecuzione del plugin risorsa. Puoi puntarlo sul tuo sorgente Java e usare il suo normale filtro, per quanto ne so.

http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

<properties> 
    <my.name>chad</my.name> 
    <java.property>//comment</java.property> 
    </properties> 

    <build> 
    <sourceDirectory>target/processed-source/java</sourceDirectory> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
     </resource> 

     <resource> 
      <directory>src/main/java</directory> 
      <filtering>true</filtering> 
      <targetPath>../processed-source/java</targetPath> 
     </resource> 
    </resources> 

    </build> 

Quindi, la prima cosa è che si tratta della sorgente java trasformato in una cartella speciale nella directory di destinazione. Successivamente, devi riconfigurare il plugin del compilatore per NON compilare il sorgente non filtrato e, invece, compilare la nuova fonte. Nota, come per tutte le cose, puoi configurare molto più di questo.

Questo blog entry è utile.

+0

Grazie per la risposta, ma non riesco a farlo funzionare, anche se specificherò l'attributo Maven di "targetPath'. In effetti, non ho mai provato a utilizzare i file di origine * .java, hai qualche esempio funzionante? – sp00m

+0

Funziona;) Aggiungerò la mia configurazione. – chad

+0

Fantastico, grazie! – sp00m