2010-10-13 36 views
13

Comment structureriez-vous Freemarker (ou une alternative) en tant que générateur de code de modèle dans un projet Maven? Je suis assez nouveau à Maven et j'apprécierais de l'aide.Comment utiliser un générateur de code modèle (par exemple Freemarker) dans Maven?

Je souhaite générer du code à partir de modèles dans mon projet. [a]

Plutôt que d'écrire le mien, google a trouvé freemarker qui semble être utilisé par Spring ce qui est une référence assez bonne pour moi, même si je n'ai pas encore commencé avec, d'autres suggestions qui fonctionnent bien avec Maven serait apprécié aussi.

This website me dit comment l'ajouter en tant que dépendance à mon fichier pom.xml. This SO question me dit où les sources générées devraient aller. Ce que je ne parviens pas à faire, c'est comment lier tous les éléments, pour que mes sources générées soient générées à partir des modèles, et que mes sources générées soient utilisées comme sources régulières pour compiler, tester, jar, javadoc, etc. générateur de code modèle pour Java au sein de maven et pourrait aider?

[a] Je sais que Generics serait la solution habituelle, et en fait je les utilise, mais je dois utiliser des modèles pour faire face aux cas primitifs, sans introduire d'erreurs de copier/coller. S'il vous plaît faites-moi confiance à ce sujet :-)

Répondre

20

J'avais écrit un plugin maven à cet effet. Il utilise le pré-processeur FreeMarker.

Heres le fragment de pom.xml mettant en évidence son utilisation:

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

Ici, le CfgFile est le chemin où vous gardez le fichier de configuration pour PEF. (Si vous n'utilisez pas de données spéciales passant dans FreeMarker alors un fichier vide sera suffisant) templateDirectory est l'endroit où vous gardez les modèles FreeMarker. outputDirectory est l'endroit où vous voulez que les fichiers de sortie soient générés.

Je suis en train d'écrire une documentation détaillée mettant en évidence l'utilisation des plugins et mettra à jour le project website en conséquence.

+0

+1 pour le plugin. –

+0

Comment va cette documentation? :-) Je n'arrive pas à comprendre comment passer les valeurs du pom (par exemple, project.version) pour que le plugin freemarker en soit conscient. – bacar

+1

Merci pour le plugin! C'était très utile pour une bibliothèque que je viens d'écrire! https://github.com/mintern-java/functions –

0

Voici un autre plug-in pour le travail: https://code.google.com/p/maven-replacer-plugin/

De la description originale du problème, il semble que vous devriez envisager de créer un Maven Archetype (alias modèle de projet): http://maven.apache.org/archetype/maven-archetype-plugin/

Et ça sonne comme vous pourriez vouloir ajouter quelques propriétés dans l'équation: http://maven.apache.org/archetype/maven-archetype-plugin/examples/create-with-property-file.html

Maven Archétype fonctionnalité fournit également un moyen de faire la substitution en utilisant Apache Veloci ty (assez proche de Freemarker) ... mais je n'ai pas encore tout compris.