2010-10-13 6 views
13

Come strutturate lo Freemarker (o un'alternativa) come generatore di codice di modelli in un progetto Maven? Sono abbastanza nuovo per Maven e apprezzerei un po 'di aiuto.Come utilizzare un generatore di codice template (ad es. Freemarker) in Maven?

Voglio generare del codice dai modelli nel mio progetto. [A]

Invece di scrivere il mio, googling trovato freemarker che sembra essere usato da Spring che è un buon riferimento abbastanza per me, anche se, come io non ho iniziato con esso ancora, altri suggerimenti che funzionano bene con Anche Maven sarebbe apprezzato.

This website mi dice come aggiungerlo come dipendenza al mio pom.xml. This SO question mi dice dove dovrebbero andare le sorgenti generate. Quello che non riesco a capire è come legare tutto insieme, quindi ottengo le mie sorgenti generate generate dai template, e poi le mie sorgenti generate usate come normali fonti per compilare, testare, jar, javadoc ecc. Qualcun altro ha usato un generatore di codice template per java all'interno di maven e potrebbe aiutare?

[a] So che Generics sarebbe la solita soluzione, e infatti li sto usando, ma devo usare i modelli per far fronte ai casi primitivi, senza introdurre errori di copia/incolla. Per favore, credimi su questo :-)

risposta

20

Avevo scritto un plugin di esperti per questo scopo. Utilizza il pre processore FreeMarker.

Heres il frammento da pom.xml evidenziando il suo utilizzo:

<plugins> 
    <plugin> 
     <configuration> 
      <cfgFile>src/test/resources/freemarker/config.fmpp</cfgFile> 
      <outputDirectory>target/test/generated-sources/fmpp/</outputDirectory> 
      <templateDirectory>src/test/resources/fmpp/</templateDirectory> 
     </configuration> 
     <groupId>com.googlecode.fmpp-maven-plugin</groupId> 
     <artifactId>fmpp-maven-plugin</artifactId> 
     <version>1.0</version> 
     <executions> 
      <execution> 
       <phase>generate-sources</phase> 
       <goals> 
        <goal>generate</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 
</plugins> 

Qui il CFGFILE è il percorso in cui si mantiene il file di configurazione per FMPP. (se non si stanno utilizzando dati speciali che passano in FreeMarker, sarà sufficiente un file vuoto) templateDirectory è dove si conservano i modelli di FreeMarker. outputDirectory è il punto in cui si desidera generare i file di output.

Sono in corso la scrittura di una documentazione dettagliata che evidenzia l'utilizzo dei plug-in e aggiornerò di conseguenza il numero project website.

+0

+1 per il plug-in. –

+0

Come va quella documentazione? :-) Non riesco a capire come passare i valori dal pom (ad esempio, project.version) attraverso in modo che il plugin freemarker ne sia a conoscenza. – bacar

+1

Grazie per il plugin! È stato molto utile per una biblioteca che ho appena scritto! https://github.com/mintern-java/functions –

0

Ecco un altro plug-in per il lavoro: https://code.google.com/p/maven-replacer-plugin/

Dalla descrizione originale del problema suona come si dovrebbe prendere in considerazione la creazione di un Maven Archetipo (aka Modello di progetto): http://maven.apache.org/archetype/maven-archetype-plugin/

E suona come si potrebbe desiderare di aggiungere alcune proprietà nell'equazione: http://maven.apache.org/archetype/maven-archetype-plugin/examples/create-with-property-file.html

La funzionalità Maven Archetype fornisce anche un mezzo per eseguire la sostituzione utilizzando Apache Veloci ty (abbastanza vicino allo stesso Freemarker) ... ma non ho ancora funzionato.