如何在 Maven 中使用模板代码生成器(例如 freemarker)?
Posted
技术标签:
【中文标题】如何在 Maven 中使用模板代码生成器(例如 freemarker)?【英文标题】:How do I use a template code generator (eg freemarker) in Maven? 【发布时间】:2011-04-24 21:56:39 【问题描述】:您将如何将Freemarker(或替代方案)作为模板代码生成器构建到 Maven 项目中?我对 Maven 很陌生,希望能得到一些帮助。
我想从我项目中的模板生成一些代码。 [一]
不是自己写,而是通过谷歌搜索发现freemarker 似乎被Spring 使用,这对我来说是一个足够好的参考,尽管我还没有开始使用它,任何其他可以很好地使用的建议Maven 也将不胜感激。
This website 告诉我如何将它作为依赖项添加到我的 pom.xml 中。 This SO question 告诉我生成的源应该去哪里。我无法解决的是如何将它们联系在一起,所以我从模板生成了我的生成源,然后我生成的源像常规源一样用于编译、测试、jar、javadoc 等。其他人使用过maven 中的 java 模板代码生成器,可以提供帮助吗?
[a] 我知道泛型将是通常的解决方案,事实上我正在使用它们,但我必须使用模板来处理原始情况,而不会引入复制/粘贴错误。请相信我:-)
【问题讨论】:
【参考方案1】:我为此编写了一个 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。
【讨论】:
文档进展如何? :-) 我不知道如何从 pom(例如 project.version)传递值,以便 freemarker 插件知道它们。 感谢插件!这对我刚刚写的一个库非常有用! github.com/mintern-java/functions @bacar:看看 Brandon Mintern 的 GitHub 项目中的一个很好的工作示例:github.com/mintern-java/primitive【参考方案2】:这是该工作的另一个插件: https://code.google.com/p/maven-replacer-plugin/
从问题的原始描述看来,您应该考虑创建一个 Maven Archetype(又名项目模板): 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 几乎相同)......但我还没有解决这个问题。
【讨论】:
可悲的是,即使是 Github 端口 github.com/beiliubei/maven-replacer-plugin 和分叉也有很多技术债务,所以它看起来不能按原样使用。我认为原型方法不会在代码构建器项目中起作用。以上是关于如何在 Maven 中使用模板代码生成器(例如 freemarker)?的主要内容,如果未能解决你的问题,请参考以下文章