2010-02-03 15 views
28

Ho alcuni file di origine Java che usano un prefisso di pacchetto (emulano alcune classi JDK). Io uso questi file con il prefisso per correre contro alcuni test unitari. Se i test passano voglio produrre un jar che contenga i file sorgente ma con il prefisso del pacchetto rimosso da tutti i file java.Ricerca completa e sostituzione di stringhe nei file di origine durante la copia delle risorse

Sto usando Maven per le build. Qualcuno conosce un modo per fare questo? Essenzialmente quello che voglio è qualcosa come la funzione di filtro dei plugin delle risorse, ma che fa ricerca e sostituzione appropriate (come: s/my.package.prefix .// g), piuttosto che filtrare su $ {vars}.

risposta

23

Questo può essere risolto con il plug-in Antrun. In primo luogo le fonti devono essere copiati nella directory di destinazione, con:

<build> 
    ... 
    <resources> 
    <resource> 
     <directory>src/main/java</directory> 
     <includes> 
     <include>**/*.java</include> 
     </includes> 
    </resource> 
    </resources> 
    ... 
</build> 

In secondo luogo si utilizza l'attività replace del plugin antrun per sostituire i file utilizzando il

<build> 
    ... 
    <plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
     <execution> 
     <phase>prepare-package</phase> 
     <configuration> 
      <tasks> 
      <replace token= "my.package.prefix." value="" dir="target/classes">         
       <include name="**/*.java"/> 
      </replace> 
      </tasks> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
    ... 
</build> 

preparare fase pacchetto Questo copierà i file di origine per target/classi nella fase del processo-risorse, esegui una ricerca e sostituisci i file all'interno della directory target/classes nella fase di preparazione del pacchetto e alla fine verranno eliminati nella fase del pacchetto.

+0

io preferisco in questo modo in quanto questo permetterà di più fasi di esecuzione a verificarsi, e permette di lavorare su diversi file separatamente. – JayZee

+2

La sostituzione è eseguita correttamente ma il file .java sostituito non è compilato e non è incluso nel pacchetto generato. È perché si applica il plug-in di sostituzione nella fase di preparazione del pacchetto, quando i file di origine sono stati raccolti e sono stati compilati. Devi applicare questa soluzione nella fase di compilazione, e funziona !!! – AntuanSoft

+0

Per fare qualcosa nei file Java posso consigliare [templating-maven-plugin] (http://www.mojohaus.org/templating-maven-plugin/) – khmarbaise

39

È inoltre possibile utilizzare

http://code.google.com/p/maven-replacer-plugin/

100% Maven e di fare esattamente quello che vuoi e più

+0

Indipendentemente dal fatto che non venga accettato, questo è il "Maven Way". +1 –

+0

Beh, non sarei così assertivo sulla "Via dei Maven". Questo plugin sembra davvero troppo simile a un fratello antropo o giù di lì. Ad ogni modo, coltivare il pom.xml con blocchi e blocchi di configurazioni quasi programmatiche di XML è sicuramente * non * il modo migliore. –

+1

Il link dà un 404 e ho problemi a cercarlo su google. Qualche idea su cosa è successo al plugin? –

Problemi correlati