该build.xml是我从tomcat源代码中复制而来然后进行修改,每个项目对应一个build.xml文件,由于文件内容过多,不插图,只对其中的标签做简单介绍,以作记录。
2.常用标签介绍:
(1)<project name="tomcat 8.5" default="deploy" basedir=".">
其中name表示项目名称,default表示没有指定target时缺省的target,basedir表示项目基目录,可以填写项目的实际路径
(2)<property name="webRoot.dir" value="${basedir}/WebRoot" />
<property name="dist.dir" value="${webRoot.dir}/dist" />
<property>标签有点像java中定义变量,定义了之后可以在别的地方引用,如上面两行数据。
还有类似下面的写法:
<property file="${user.home}/build.properties"/> 加载了该文件,然后就可以build.xml中使用该文件中定义的变量。
(3)target标签
<target name="clear" description="clear old files">
<delete dir="${build.dir}" />
<delete dir="${dist.dir}" /><!--删除文件夹及包含的文件-->
<delete dir="file="/lib/ant.jar"" /><!--删除文件-->
</target>
<!-- 创建目录结构 -->
<target name="init" depends="clear" description="创建目录">
<mkdir dir="${build.dir}/classes" />
<mkdir dir="${dist.dir}" />
</target>
名为init的target依赖名为clear的target,其中clear删除指定文件夹,init则创建文件夹。
target中除了delete,mkdir等task,还支持如下的内置task:
copy,echo,java,javac,move,zip,jar等,
还可以在一个target中调用另一个target,这种调用和依赖另一个target不一样:
<antcall target="someTarget"></antcall>
还可以在执行另一个构建文件<ant antfile="projectb/projectb.xml">
以上都是内置的task,我们也可以编写自己的task.下面将会介绍。
(4).filterset:定义了一组过滤器,这些过滤器将在文件移动或复制时完成文件的文本替换
<filterset id="version.filters">
<filter token="YEAR" value="${year}"/>
</filterset>
(5)path:如果想在多个task中使用相同的path-like structure,用<path>元素定义,然后通过id属性引用。
<path id="mypath">
<pathelement path="{classpath}"/>
<fileset dir="${tomcat.extras}/webservices"><include name="jaxrpc.jar"/>
<include name="wsdl4j.jar"/>
</fileset>
<pathelement location="classes"/>
</path>
(6).fileset用来定义目录位置及操作适用于该目录下的那些子目录或文件,如与copy,path等组合使用
<path id="tomcat.webservices.classpath">
<path refid="tomcat.classpath" />
<fileset dir="${tomcat.extras}/webservices">
<include name="jaxrpc.jar"/>
<include name="wsdl4j.jar"/>
</fileset>
</path>
(7)patternset:对模式的分组,可以被另一个模式通过id引用。
<patternset id="files.tomcat-extras-jmxremote">
<include name="org/apache/catalina/mbeans/JmxRemote*" />
</patternset>
<jarIt jarfile="${catalina-jmx-remote-src.jar}"
filesDir="java"
filesId="files.tomcat-extras-jmxremote" />
或者
<patternset id="text.files" >
<include name="**/INSTALLLICENSE"/>
<patternset />
<fileset dir="modules/jdbc-pool" >
<exclude name=".*/**"/>
<exclude name="**/MANIFEST.MF"/>
<patternset refid="text.files" />
</fileset>
3.内置的task和定义自己的task
(1)内置的task
在源码apache-ant-1.9.9-src\apache-ant-1.9.9\src\main\org\apache\tools\ant\taskdefs路径下:我们查看echo内置task的java类:
基本过程是继承Task类,重写execute方法,为了能够在java类中获取build.xml中echo的message参数,需要写message的getter和setter方法。最后echo.java被打包在ant.jar文件中。
(2)编写自定义的Task步骤如下:
a.继承Task,并重写execute方法;b.为了能够接受xml中传递下来的参数,编写setter和getter方法;c.将java文件打包为jar包;
在xml中使用自定义的task的方法如下:
<target description="自定义task">
<taskdef name="mytask" classname="MyTask" classpath="mytask.jar"/>
<mytask msg="OK"/>
</target>
4.使用ant
安装ant,配置环境变量。
如果是在myeclipse中,可以选择build.xml文件,右键--Run As --Ant Build来执行;
也可以使用cmd直接进入build.xml所在的路径,然后执行ant命令。