我如何在Maven中使用模板代码生成器(例如,freemarker)?

问题描述 投票:13回答:3

[如何将Freemarker(或替代结构)构造为Maven项目中的模板代码生成器?我是Maven的新手,希望能获得一些帮助。

我想从我项目的模板中生成一些代码。 [a]

不是写我自己的,而是谷歌搜索发现freemarker似乎已被Spring使用,这对我来说是一个很好的参考,尽管由于我还没有开始使用它,所以其他建议也可以与Maven一起使用也将不胜感激。

This website告诉我如何将其添加为对pom.xml的依赖。This SO question告诉我生成的源应该去哪里。我无法解决的是如何将所有内容捆绑在一起,因此我从模板生成了生成的源,然后将生成的源用作常规源,如编译,测试,jar,javadoc等的常规源。 Maven中的Java模板代码生成器,可以帮忙吗?

[a]我知道泛型将是通常的解决方案,实际上我正在使用它们,但是我必须使用模板来处理原始情况,而不会引入复制/粘贴错误。请相信我:-)

java maven-2 freemarker templating
3个回答
20
投票

我为此目的编写了一个maven插件。它使用FreeMarker预处理器。

这里是pom.xml的片段,突出显示其用法:

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

这里cfgFile是保存FMPP的配置文件的路径。 (如果您不使用FreeMarker中传递的任何特殊数据,那么一个空文件就足够了)templateDirectory是保存FreeMarker模板的位置。outputDirectory是您要在其中生成输出文件的位置。

我正在编写详细的文档,突出显示插件的用法,并将相应地更新project website


0
投票

这里是该工作的另一个插件:https://code.google.com/p/maven-replacer-plugin/

从问题的原始描述看,您应该考虑创建Maven原型(又称项目模板):http://maven.apache.org/archetype/maven-archetype-plugin/

听起来您可能想在方程式中添加一些属性:http://maven.apache.org/archetype/maven-archetype-plugin/examples/create-with-property-file.html

Maven Archetype功能还提供了一种使用Apache Velocity进行替换的方法(与Freemarker足够近...但是我还没有解决这个问题。


-2
投票

[如果您有兴趣,我们从另一个freemarker maven插件创建了一个fork,它具有一些用于生产环境的功能:

  1. 支持当前的freemarker最新版本(v。2.3.29,2019年8月)
  2. 支持Eclipse(M2E)生命周期管理。
  3. 作为软件包发布在Maven中央仓库中。

该项目位于github freemarker-maven-plugin

基于另一个缺少上述功能的项目的分支:enter link description here

© www.soinside.com 2019 - 2024. All rights reserved.