今天比较系统的看了下ANT,发现自己以前对ant的看法太肤浅了,今天才理解ant是一个多么有用的Workflow framework,而远远超越了一个部署工具。
ant+想象力=powerful tools。
还没有接触ant自定义task的编写,只学习了datatype,property,core task。
在学习的过程中跟着写了些例子,发现对datatype的理解还是比较混乱,还要多写写才要的。
现把一些今天写的文档弄出来,
还是望指点,能给一些best practice。
<?xml version="1.0" encoding="UTF-8"?>
<project name="xdocletExample" default="selectTask" basedir=".">
<property name="xdoclet.lib.dir" location="${basedir}/lib" />
<property name="gen.src.dir" location="${basedir}/target" />
<property name="src.dir" location="${basedir}/src/" />
<property name="build.dir" location="${basedir}/build/classes" />
<property name="template.dir" location="${basedir}/template" />
<property name="customtag.dir" location="${basedir}/bin" />
<property name="junit.build.dir" location="${basedir}/build/test" />
<property name="junit.src.dir" location="${basedir}/test" />
<property name="jar.dir" location="${basedir}/build/dist" />
<property name="doc.dir" location="${basedir}/build/doc" />
<fileset id="class.path" dir="${xdoclet.lib.dir}" includes="*.jar" />
<path id="xdoclet.lib.path">
<fileset refid="class.path" />
</path>
<path id="junit.lib.path">
<fileset refid="class.path" />
<pathelement location="${junit.build.dir}" />
</path>
<patternset id="gener.dir">
<include name="${src.dir}/temp/**/*.java" />
<exclude name="${src.dir}/org/**/*.java" />
</patternset>
<target name="init">
<mkdir dir="${junit.build.dir}" />
<mkdir dir="${build.dir}" />
<mkdir dir="${jar.dir}" />
<mkdir dir="${doc.dir}" />
</target>
<!--为ant创建一个dtd文件-->
<target name="createdtd">
<antstructure output="${junit.build.dir}/build.dtd" />
</target>
<!-- END -->
<!--定义时间变量格式-->
<tstamp>
<format property="buildtime" pattern="yyyy-MM-d hh:mm aa" />
</tstamp>
<!-- END -->
<!--测试是否含有环境变量JAVA_HOME -->
<property environment="env" />
<target name="checkJavaHome" if="env.JAVA_HOME">
<echo message="java_home has been setup" />
</target>
<!-- END -->
<!-- 运行系统的dir命令 -->
<target name="applydir">
<echo>begin dir current folder</echo>
<apply executable="dir" vmlauncher="false" os="Windows XP" failonerror="true">
<fileset dir="." />
</apply>
</target>
<!-- END -->
<!--输入一个可以执行的任务-->
<target name="selectTask">
<input message="请输入一个您要执行的任务,可选择的有:" addproperty="ant.task" />
<echo message="" />
<antcall target="${ant.task}" />
</target>
<!-- END -->
<!-- 判断Junit包是否在类路径中,并设置canTest属性-->
<available classname="org.junit.Test" property="canTest" />
<target name="availabletest" if="canTest">
<echo>
${canTest}
org.junit.Test available!
</echo>
</target>
<!-- END -->
<!-- filter 测试 提供说明.txt中的版本声名和构建时间的信息-->
<target name="buildIntro">
<delete>
<fileset dir="${gen.src.dir}">
<include name="**/*.txt" />
</fileset>
</delete>
<copy todir="${gen.src.dir}" filtering="true">
<fileset dir="${src.dir}">
<include name="**/*.txt" />
</fileset>
<filterset begintoken="%" endtoken="%">
<filter token="copyright" value="Copyright (c) 2006
www.stefstudio.com " />
<filter token="buildtime" value="${buildtime}" />
</filterset>
</copy>
</target>
<!-- END -->
<!-- 编译测试类 -->
<target name="buildtest" depends="init">
<!--如果targetfile(编译的.class文件)比源文件旧,则删除所有.class文件,相当于一次clean -->
<dependset>
<srcfileset dir="${junit.src.dir}" includes="**/*.java" />
<targetfileset dir="${junit.build.dir}" includes="**/*.class" />
</dependset>
<javac destdir="${junit.build.dir}" srcdir="${junit.src.dir}" debug="true">
<classpath refid="xdoclet.lib.path" />
</javac>
</target>
<!-- END -->
<!--测试-->
<target name="junittest" depends="buildtest">
<junit printsummary="withOutAndErr" haltonfailure="true">
<classpath refid="junit.lib.path" />
<formatter type="brief" usefile="false" />
<formatter type="xml" />
<batchtest todir="${junit.build.dir}">
<fileset dir="${junit.build.dir}" includes="**/*Test*.class" />
</batchtest>
</junit>
</target>
<!-- END -->
<!-- 编译xDoclet customTag包并打包,同时在一个.txt文件中持续记录-->
<target name="buildAndJarTags" depends="init">
<!--编译tags文件-->
<javac destdir="${build.dir}" srcdir="${src.dir}">
<classpath refid="xdoclet.lib.path" />
</javac>
<echo file="${basedir}/build/readme.txt" append="true"> build tags src at ${buildtime}
</echo>
<!--打包jar-->
<jar destfile="${jar.dir}/customTags.jar" basedir="${build.dir}" includes="**/*.class" />
<echo file="${basedir}/build/readme.txt" append="true"> jar tags class at ${buildtime}
</echo>
<!--删除readme.txt文件中的制表符,替换为2个空格-->
<fixcrlf srcdir="${basedir}/build" tab="remove" tablength="2" includes="*readme.txt" />
</target>
<!-- 生成Tags包的文档 -->
<target name="generDoc" depends="init">
<javadoc destdir="${doc.dir}">
<package name="org.xdoclet.customTags.*" />
<sourcepath location="${src.dir}" />
<classpath location="${xdoclet.lib.dir}" />
</javadoc>
</target>
<!--定义XDoclet任务-->
<taskdef name="xdoclet" classname="xdoclet.DocletTask" classpathref="xdoclet.lib.path" />
<!-- END -->
<target name="summary" depends="init">
<xdoclet destdir="${gen.src.dir}">
<fileset dir="${src.dir}" patternset="gener.dir" />
<template templateFile="${template.dir}/summary.xdt" destinationfile="summary.txt" />
</xdoclet>
</target>
<target name="generitf">
<xdoclet destdir="${gen.src.dir}">
<fileset dir="${src.dir}" patternset="gener.dir" />
<template templateFile="${template.dir}/generitf.xdt" acceptInterfaces="false" acceptAbstractClasses="false" destinationfile="I{0}QueryDAO.java" />
</xdoclet>
</target>
<target name="gener">
<xdoclet destdir="${gen.src.dir}/temp">
<fileset dir="${src.dir}" patternset="gener.dir" />
<template templateFile="${template.dir}/gener.xdt" acceptInterfaces="false" acceptAbstractClasses="false" destinationfile="{0}QueryDAOImpl.java" />
</xdoclet>
</target>
<target name="cleanall">
<delete>
<fileset dir="${src.dir}/temp">
<include name="*.java" />
</fileset>
<fileset dir="${gen.src.dir}">
<include name="**/*.java" />
</fileset>
</delete>
</target>
<target name="clean">
<delete>
<fileset dir="${gen.src.dir}">
<include name="**/*.java" />
</fileset>
</delete>
</target>
</project>
都有一些解释,
不多写了,继续学习~