1、下载安装ant,配置环境变量;添加变量ANT_HOME,变量值为ant软件根目录
2、进入cmd ,输入ant ,输出如下图表明安装成功。
3、创建maven 工程
4、创建build.xml打包脚本
<?xml version="1.0" ?>
<project name="ant-project" default="print-dir" basedir=".">
<target name="print-dir">
<echo message="The base dir is: ${basedir}" />
</target>
</project>
定义了default 属性的值为print-dir,即当运行ant 命令时,如果没有指明执行的target,则将执行默认的target(print-dir)。此外,还定义了basedir 属性的值为 “.” ,.表示当前目录,进入当前目录后运行ant 命令,得一下结果:
4.1 target节点元素介绍
target为ant的基本执行单元或是任务,它可以包含一个或多个具体的单元/任务。多个target 可以存在相互依赖关系。它有如下属性:
● name 属性:指定 target 元素的名称,这个属性在一个 project 元素中是唯一的。我们可以通过指定 target 元素的名称来指定某个 target 。
● depends 属性:用于描述 target 之间的依赖关系,若与多个 target 存在依赖关系时,需要以“,”间隔。 Ant 会依照 depends 属性中 target 出现的顺序依次执行每个 target ,被依赖的target 会先执行。
● if 属性:用于验证指定的属性是存在,若不存在,所在 target 将不会被执行。
● unless 属性:该属性的功能与 if 属性的功能正好相反,它也用于验证指定的属性是否存在,若不存在,所在 target 将会被执行。
● description 属性:该属性是关于 target 功能的简短描述和说明。
<?xml version="1.0" ?>
<project name="ant-project" default="print-dir" basedir=".">
<target name="version" if="ant.java.version">
<echo message="Java Version: ${ant.java.version}" />
</target>
<target name="print-dir" depends="version" unless="docs">
<description>
a depend example!
</description>
<echo message="The base dir is: ${basedir}" />
</target>
</project>
输出结果:
4.2 property属性节点元素
property元素可看作参量或者参数的定义,project 的属性可以通过 property 元素来设定,也可在 Ant 之外设定。若要在外部引入某文件,例如 build.properties 文件,可以通过如下内容将其引:
<property file="build.properties"/>
property 元素可用作 task 的属性值。在 task 中是通过将属性名放在${属性名}之间,并放在 task 属性值的位置来实现的。
Ant 提供了一些内置的属性,它能得到的系统属性的列表与 Java 文档中 System.getProperties() 方法得到的属性一致,这些系统属性可参考 sun 网站的说明。同时, Ant 还提供了一些它自己的内置属性,如下:
basedir: project 基目录的绝对路径;
ant.file: buildfile的绝对路径
ant.version: Ant 的版本信息
ant.project.name: 当前指定的project的名字,即前文说到的project的name属性值;
ant.java.version: Ant 检测到的JDK版本
<?xml version="1.0" ?>
<project name="ant-project" default="example" basedir=".">
<property name="name" value="oyc" />
<property name="age" value="25" />
<target name="example">
<echo message="name: ${name}, age: ${age}" />
</target>
</project>
输出结果:
4.3 copy命令
copy主要用来对文件和目录的复制功能
<?xml version="1.0" ?>
<project name="ant-project" default="example" basedir=".">
<target name="example">
<copy file="pom.xml" tofile="pom.bak"/>
<copy todir="src.bak"> <fileset dir="src"/> </copy>
<copy file="pom.xml" todir="D:/"/>
<echo message="copy file success" />
</target>
</project>
执行结果:
4.4 delete命令
对文件或目录进行删除,举例如下:
<?xml version="1.0" ?>
<project name="ant-project" default="example" basedir=".">
<target name="example">
<copy file="pom.xml" tofile="pom.bak"/>
<copy todir="src.bak"> <fileset dir="src"/> </copy>
<copy file="pom.xml" todir="D:/"/>
<delete file="pom.bak"/>
<delete dir="src.bak"/>
<delete includeEmptyDirs="true"> <fileset dir="." includes="**/*.bak"/> </delete>
<echo message="copy file success" />
</target>
</project>
运行结果:
4.5 mkdir 命令
创建目录 <mkdir dir="/home/philander/build/classes"/>
4.6 move 命令
移动文件或目录,举例如下:
<move file="sourcefile" tofile=”destfile”/>
移动单个文件到另一个目录:
<move file="sourcefile" todir=”movedir”/>
移动某个目录到另一个目录:
<move todir="newdir"> <fileset dir="olddir"/> </move>
4.7 echo命令
该任务的作用是根据日志或监控器的级别输出信息。它包括 message 、 file 、 append 和 level 四个属性,举例如下:
<echo message="ant message" file="/logs/ant.log" append="true">
5 jar 标签节点元素
该标签用来生成一个JAR文件,其属性如下。
● destfile表示JAR文件名。
● basedir表示被归档的文件名。
● includes表示别归档的文件模式。
● exchudes表示被排除的文件模式。
● compress表示是否压缩。
<?xml version="1.0" ?>
<project name="ant-project" default="example" basedir=".">
<target name="example">
<property name="name" value="test" />
<property name="dest" value="src" />
<jar destfile="${basedir}/${name}.jar" level="9" compress="true" encoding="utf-8" basedir="${basedir}/${dest}"></jar>
</target>
</project>
运行结果:
同样打包操作的的还有war、tgz,已经解压操作uzip
<?xml version="1.0" ?>
<project name="ant-project" default="example" basedir=".">
<target name="example">
<property name="name" value="test" />
<property name="dest" value="src" />
<property name="file" value="pom.xml" />
<jar destfile="${basedir}/${name}.jar" level="9" compress="true" encoding="utf-8" basedir="${basedir}/${dest}"></jar>
<zip basedir="${basedir}/${dest}" zipfile="${basedir}/${dest}.zip"/>
<gzip src="${basedir}/${file}" zipfile="${basedir}/${file}.gz"/>
<!-- 解压zip -->
<unzip src="output.class.gz" dest="extractDir"/>
<!-- 建立war包 -->
<war destfile="${webRoot}/ash.war" basedir="${basedir}/web" webxml="${basedir}/web/WEB-INF/web.xml">
<exclude name="WEB-INF/classes/**"/>
<exclude name="WEB-INF/lib/**"/>
<exclude name="WEB-INF/work/_jsp/**"/>
<lib dir="${lib.dir}" includes="**/*.jar, **/*.so, **/*.dll">
<exclude name="${webRoot}\${helloworld_jar}"/>
</lib>
<lib file="${webRoot}/${helloworld_jar}"/>
<classes dir="${dest}" includes="**/*.xml, **/*.properites, **/*.xsd"> </classes>
</war>
</target>
</project>
ant 打包工程:
<path id="buildpath">
<fileset refid="lib.runtime"/>
<fileset refid="lib.container"/>
<fileset refid="lib.extras"/>
</path>
<path id="src.paths">
<fileset id="srcs" dir=".">
<include name="src/**/*.java"/>
</fileset>
</path>
八、ant编译打包、运行工程
复制代码代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- name是当前工程的名称,default是默认执行的任务,basedir是工作目录(.代表当前根目录) -->
<project name="HelloWorld" default="run" basedir=".">
<!-- property类似于程序中定义简单的变量 -->
<property name="src" value="src"/>
<property name="dest" value="classes"/>
<property name="hello_jar" value="helloWorld.jar"/>
<!--
target是一个事件、事情、任务, name是当前事情的名称,depends是依赖的上一件或是多件事情
如果所依赖的事情没有执行,ant会先运行依赖事情,然后再运行当前事情
-->
<!-- 初始化 -->
<target name="init">
<!-- 建立classes目录 -->
<mkdir dir="${dest}"/>
<mkdir dir="temp"/>
<mkdir dir="temp2"/>
</target>
<!-- 编译 -->
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${dest}"/>
<!-- 设置jvm内存
<javac srcdir="src" fork="true"/>
<javac srcdir="src" fork="true" executable="d:\sdk141\bin\javac"
memoryMaximumSize="128m"/>
-->
</target>
<!-- 建立jar包 -->
<target name="build" depends="compile">
<!--
<jar jarfile="${hello_jar}" basedir="${dest}"/>
创建一个名称是package.jar文件
<jar destfile="package.jar" basedir="classes"/>
-->
<jar destfile="${hello_jar}" basedir="classes">
<!-- 向jar包中的main文件中添加内容 -->
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Main-class" value="package.Main"/>
</manifest>
</jar>
<!-- 复制jar文件 todir="复制到目录"-->
<copy file="${hello_jar}" tofile="${dest}\temp.jar"/>
<copy todir="temp">
<!-- 不按照默认方式 defaultexcludes="" -->
<fileset dir="src">
<include name="**/*.java"/>
</fileset>
</copy>
<copy todir="temp2">
<fileset dir="src">
<and>
<contains text="main"/>
<size value="1" when="more"/>
</and>
</fileset>
</copy>
<!-- 移动jar文件 -->
<move file="${dest}\temp.jar" tofile="temp\move-temp.jar"/>
<!-- 创建zip -->
<zip basedir="${basedir}\classes" zipfile="temp\output.zip"/>
<!-- 创建tgz -->
<gzip src="classes\**\*.class" zipfile="output.class.gz"/>
<!-- 解压zip -->
<unzip src="output.class.gz" dest="extractDir"/>
<!--替换input.txt内容中的old为new
<replace file="input.txt" token="old" value="new"/>
-->
</target>
<!-- 运行 -->
<target name="run" depends="build">
<java classname="com.hoo.test.HelloWorld" classpath="${hello_jar}"/>
</target>
<!-- 清除 -->
<target name="clean">
<!-- 删除生成的文件 -->
<delete dir="${dest}"/>
<delete file="${hello_jar}"/>
</target>
<tstamp>
<format property="OFFSET_TIME"
pattern="HH:mm:ss"
offset="10" unit="minute"/>
</tstamp>
<!-- 重新运行 -->
<target name="rerun" depends="clean,run">
<echo message="###${TSTAMP}#${TODAY}#${DSTAMP}###"/>
<aunt target="clean"/>
<aunt target="run"/>
</target>
</project>