需求是根据模板类生成一些类。
看了一篇帖子Ant+Freemarker+xml 生成Html , 生成的文件名只能和模板类同名。查了freemarker的文档,没有发现支持这个功能。 FMPP 能够完成这个任务。
Download fmpp_0.9.14.tar.gz
目录结构

数据源books.xml
<?xml version="1.0" encoding="UTF-8"?> <classes> <packagename>org.myym.books</packagename> <class> <name>ScienceFiction</name> </class> <class> <name>Novel</name> </class> <pluginpackagename>org.myym.books.editor</pluginpackagename> </classes>
模板
<@pp.dropOutputFile />
<#list model.classes.class as class>
<@pp.changeOutputFile name="${class.name}Editor.java" />
package ${model.classes.pluginpackagename};
import ${model.classes.pluginpackagename}.Type
public class ${class.name}Editor{
protected String getEditorTitle() {
return "${class.name} Editor";
}
protected Type getType(){
return Type.${class.name?upper_case};
}
}
</#list>
模板文件的后缀名是任意的。这里命名成ftl是因为安装了'FreeMarker IDE' plug-in.可以高亮代码
<@pp.changeOutputFile name="${class.name}Editor.java" />
name可以指定文件夹
A.name="src/${class.name}Editor.java" 在模板文件路径下生成src的文件夹
并在src文件夹下生成.java文件
B.name="/src/${class.name}Editor.java' 则在destdir目录下生成src文件夹
<fmpp srcdir="templates"
destdir="gen-out"
logfile="log.fmpp"
data="model:xml(../model/books.xml)"/>
build.xml
<project name="Fmpp-Ant" default="generate">
<taskdef name="fmpp" classname="fmpp.tools.AntTask">
<classpath>
<fileset dir="lib">
<include name="*.jar" />
</fileset>
</classpath>
</taskdef>
<target name="generate">
<fmpp srcdir="templates"
destdir="gen-out"
logfile="log.fmpp"
data="model:xml(../model/books.xml)"/><!--relative path to 'srcdir'-->
</target>
<target name="clean" description="Deletes the output">
<delete includeemptydirs="true" verbose="true">
<fileset dir="." includes="gen-out/"/>
</delete>
</target>
</project>
运行ant-task 'generate'后,刷新Project, 会生成一个文件夹'gen-out'
本文介绍如何利用FMPP从XML配置文件自动生成类文件,并通过Ant任务进行项目构建,简化类生成和部署流程。

被折叠的 条评论
为什么被折叠?



