2010-10-13 10 views
13

Wie würden Sie Freemarker (oder eine Alternative) als Templating-Code-Generator in ein Maven-Projekt strukturieren? Ich bin Maven ziemlich neu und würde mich über Hilfe freuen.Wie verwende ich einen Template-Code-Generator (zB Freemarker) in Maven?

Ich möchte Code aus Vorlagen in meinem Projekt generieren. [a]

Anstatt meine eigene zu schreiben, gefunden googling freemarker, die von Spring verwendet wird, die eine gute Referenz für mich ist, obwohl ich noch nicht damit begonnen habe, andere Vorschläge, die gut mit Maven würde auch geschätzt werden.

This website sagt mir, wie man es als eine Abhängigkeit zu meiner pom.xml hinzufügen. This SO question sagt mir, wo die generierten Quellen gehen sollen. Was ich nicht ausarbeiten kann ist, wie alles zusammengebunden wird, damit ich meine generierten Quellen aus den Templates generieren kann, und dann meine generierten Quellen wie normale Quellen für compile, test, jar, javadoc usw. benutzt Template-Code-Generator für Java innerhalb Maven und könnte helfen?

[a] Ich weiß Generics wäre die übliche Lösung, und tatsächlich benutze ich sie, aber ich muss Vorlagen verwenden, um mit den primitiven Fällen fertig zu werden, ohne Kopier-/Einfügefehler einzuführen. Bitte vertrau mir folgendes :-)

Antwort

20

Ich hatte zu diesem Zweck ein Maven-Plugin geschrieben. Es verwendet den FreeMarker Pre Processor.

Heres das Fragment aus pom.xml Hervorhebung seiner Nutzung:

<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> 

Hier ist der CFGFILE ist der Pfad, in dem Sie die Konfigurationsdatei halten für FMPP. (Wenn Sie keine speziellen Daten verwenden, die in FreeMarker übergeben werden, genügt eine leere Datei.) templateDirectory ist der Speicherort für die FreeMarker-Vorlagen. outputDirectory ist der Ort, an dem die Ausgabedateien generiert werden sollen.

Ich schreibe eine detaillierte Dokumentation, die die Plugins-Nutzung hervorhebt und aktualisiere die project website entsprechend.

+0

+1 für das Plugin. –

+0

Wie läuft diese Dokumentation? :-) Ich kann nicht herausfinden, wie man Werte vom Pom (zB project.version) durchgibt, damit das Freemarker-Plugin sie kennt. – bacar

+1

Danke für das Plugin! Es war sehr nützlich für eine Bibliothek, die ich gerade geschrieben habe! https://github.com/mintern-java/functions –

0

Hier ist ein weiteres Plugin für den Job: https://code.google.com/p/maven-replacer-plugin/

Von der ursprünglichen Beschreibung des Problems, es klingt wie Sie eine Maven Urform (auch bekannt als Projektvorlage) zu schaffen in Betracht ziehen sollten: http://maven.apache.org/archetype/maven-archetype-plugin/

Und es klingt Wie Sie vielleicht einige Eigenschaften in die Gleichung hinzufügen möchten:

Maven Archetype-Funktionalität bietet auch eine Möglichkeit der Ersetzung von Apache Veloci ty (fast genug das gleiche wie Freemarker) ... aber ich habe noch nicht so weit gearbeitet.