目录
简介
Apache Ant,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。由Apache软件基金会所提供。
优点
Ant是Apache软件基金会JAKARTA目录中的一个子项目,它有以下的优点。跨平台性。Ant是纯Java语言编 写的,所以具有很好的跨平台性。操作简单。Ant是由一个内置任务和可选任务组成的。Ant运行时需要一个XML文件(构建文件)。 Ant通过调用target树,就可以执行各种task。每个task实现了特定接口对象。由于Ant构建文件 时XML格式的文件,所以很容易维护和书写,而且结构很清晰。Ant可以集成到开发环境中。由于Ant的跨平台性和操作简单的特点,它很容易集成到一些开 发环 境中去。
安装
下载ant
http://ant.apache.org/bindownload.cgi 下载
环境搭建
安装jdk
配置环境变量
l JAVA_HOME:java安装根目录
l ANT_HOME: ant解压后的根路径
l path中添加%ANT_HOME%\bin;%JAVA_HOME%\bin
l 打开cmd命令行输入ant 出现如下提示说明ant安装成功
ant命令实质是执行的jdk中的命令,因此JAVA_HOME环境变量必须配置,ant命令会去找环境变量中java_home这个环境变量来调用jdk所提供的编译、运行等命令。
myeclipse中ant配置
window>preferences>ant
选中Ant Home Entries点击Ant Home
选择自己安装的ant根目录
ant之初体验
使用jdk提供的命令手动编译运行
新建一个antProject工程,编写HelloWorld.java
package com.ccc.anttest; public class HelloWorld{ public static void main(String[] args){ System.out.println("Hello World"); } } |
在控制台进入到HelloWorld.java所在的目录
输入javac HelloWorld.java编译
将编译好的class文件放到指定的包下面,然后进入src目录
运行 java com.ccc.anttest.HelloWorld
手动编译运行需要手动创建包结构,然后把编译好的class文件拷贝到创建好的包结构中。
使用ant编译
在项目下创建build.xml
<?xml version="1.0" encoding="GBK"?> <project name="antProject" default="jar" basedir="."> <!-- 删除目录 --> <target name="clean"> <delete dir="build" /> <delete dir="dist" /> </target> <!-- 创建目录 --> <target name="init" depends="clean"> <mkdir dir="build/classes" /> <mkdir dir="dist" /> </target> <!-- 编译 --> <target name="compile" depends="init" > <javac srcdir="src" destdir="build/classes" includeantruntime="on" /> </target> <!-- 运行 --> <target name="run" depends="compile" > <java classname="com.ccc.anttest.HelloWorld" > <!-- 设置classpath --> <classpath> <pathelement path="build/classes" /> </classpath> </java> </target> <!-- 打成jar包 --> <target name="jar" depends="run" > <jar destfile="dist/project.jar" basedir="build/classes" /> </target> </project> |
在cmd命令控制台进入项目下
输入ant命令。默认情况下ant回去找build.xml
执行以上结果如图
build、dist由ant创建
参数属性
ant命令参数
ant -help,-h 显示帮助
ant -projecthelp,-p 显示执行时备注信息
ant -version 查看版本
ant -diagnostics 显示ant项目的运行环境、依赖库等信息,为错误诊断和报告提供有用信息
ant -debug, -d 调试运行
ant -lib<path> 添加依赖jar包
ant -quiet, -q 隐藏ant执行的提示输出信息,命令行将不会显示具体的target提示信息
ant -verbose, -v 显示ant执行的详细信息,包括操作系统和java环境等信息
ant -buildfile<file> 指定执行构建文件
ant -D<property>=<value>设置属性值
ant -find<file>,-s<file> 查找构建文件,并执行找到的构建文件
ant系统属性参数
os.name:操作系统的名称
basedir:项目引用的根路径
ant.home:ant工具的根目录
ant.file:构建文件的绝对路径
ant.version:ant的版本信息
ant.java.version:ant检测到的jvm版本
ant.project.name:当前执行的项目名称
java.version:java的版本信息
java.home:java的根目录
java.class.path:java类库的文件位置
line.separator:换行符
user.home:用户的home目录。在linux或unix中经常用到
ant自定义属性参数
一、在构建文件中定义
<property name="name" value="ccc"></property> <echo>构建文件由${name}创建</echo> |
二、使用属性文件定义
创建一个properties文件。eg:value.properties
version=0.1 creater=czb build=build/classes |
三、控制台定义
使用命令ant –D<property>=<value>
在构建文件中引用
<echo>当前构建版本${version}</echo> <echo>构建文件由${creater}创建</echo> <mkdir dir="${build}" /> |
引用自定义属性使用符号”${}”类似于EL表达式
构建文件属性
一、日期
tstamp 元素一般不定义属性和内容,不产生任何输出;相反,它根据当前系统时间和日期设置 Ant 以下属性:
属性
DSTAMP 设置为当前日期,默认格式为yyyymmdd 20031217
TSTAMP 设置为当前时间,默认格式为hhmm 1603
TODAY 设置为当前日期,带完整的月份 2003 年12 月17 日
自定义日期格式
<tstamp> <format property="TODAY" pattern="d-MMMM-yyyy" locale="zh" /> </tstamp> <echo message="${TODAY}"/> |
二、文件操作
<tstamp/> |
三、指定一组特定目标执行
<target name="createjar" description="打jar包"> <antcall target="clean" /> <antcall target="init" /> <antcall target="compile" /> <antcall target="jar" /> </target> |
四、生成文档
<target name="doc" depends="compile" description="生成文档"> <javadoc destdir="doc" encoding="UTF-8" docencoding="GBK"> <packageset dir="src"> <!-- 需要生成文档的文件 --> <include name="**"/> <!-- 不需要生成文档的文件 --> <exclude name="" /> </packageset> </javadoc> </target> |
五、打包操作
<target name="zip" description="打zip包"> <zip destfile="dist/project.zip" > <fileset dir="src"> <include name="**" /> <exclude name="" /> </fileset> </zip> </target> |
<target name="zip" depends="dist"> |
构建web项目
build.xml
<project name="antWebProject" default="startService" basedir="."> <property name="webapp.name" value="${ant.project.name}" /> <property name="catalina.home" value="D:/apache-tomcat-6.0.35"/> <property name="src.dir" value="${basedir}/src" /> <property name="lib.dir" value="${basedir}/WebRoot/WEB-INf/lib"/> <property name="class.dir" value="${basedir}/WebRoot/WEB-INf/classes"/> <property name="webapps.dir" value="${catalina.home}/webapps" /> <property name="web.dir" value="WebRoot" /> <property name="war.dir" value="war" /> <path id="compile.classpath"> <fileset dir="${catalina.home}/lig"> <include name="*.jar" /> </fileset> <fileset dir="${lib.dir}"> <include name="*.jar" /> </fileset> </path>
<target name="clean" description="删除目录"> <delete dir="${class.dir}" /> <delete dir="${war.dir}" /> </target>
<target name="init" depends="clean" description="创建目录"> <mkdir dir="${class.dir}" /> <mkdir dir="${war.dir}" /> </target>
<target name="compile" depends="init" description="编译"> <javac srcdir="src" destdir="${class.dir}" includeantruntime="false"> <classpath> <fileset dir="${catalina.home}/lib"> <include name="*.jar"/> </fileset> </classpath>
</javac> </target>
<target name="copy" depends="compile" description="拷贝资源配置文件"> <copy todir="${class.dir}"> <fileset dir="src"> <exclude name="**/*.java" /> </fileset> </copy> </target>
<target name="deploy" depends="copy" description="打包部署"> <war destfile="${webapps.dir}/${webapp.name}.war" webxml="${basedir}/WebRoot/WEB-INf/web.xml"> <fileset dir="${basedir}/WebRoot"> <include name="**"/> </fileset> </war> </target>
<target name="startService" depends="deploy" description="启动tomcat"> <exec executable="${catalina.home}/bin/startup.bat" /> </target>
</project> |
ant集成junit
build.xml
<?xml version="1.0" encoding="UTF-8"?> <projectname="ant-junit"default="run.test"basedir="."> <propertyname="src.dir"location="src"></property> <propertyname="test.src.dir"location="test"></property> <propertyname="build.dir"location="build"></property> <propertyname="build.classes"location="${build.dir}/classes"></property> <propertyname="build.test.dir"location="${build.dir}/test"></property> <propertyname="build.test.classes"location="${build.test.dir}/classes"></property> <propertyname="build.test.report"location="${build.test.dir}/report"></property> <propertyname="lib.dir"location="lib"></property>
<propertyname="run.test.class"value="**/*.class"></property>
<pathid="compile-path"> <filesetdir="${lib.dir}"> <includename="*.jar"/> </fileset> </path>
<pathid="compile-test-path"> <pathrefid="compile-path"></path> <dirsetfile="${build.classes}"></dirset> </path>
<pathid="run-test-path"> <pathrefid="compile-test-path"/> <dirsetdir="${build.test.classes}"></dirset> </path>
<targetname="clean"description="清理"> <deletedir="${build.dir}"></delete> </target>
<targetname="init"depends="clean"description="初始化"> <echo>初始化</echo> <mkdirdir="${build.dir}"/> <mkdirdir="${build.classes}"/> <mkdirdir="${build.test.dir}"/> <mkdirdir="${build.test.classes}"/> <mkdirdir="${build.test.report}"/> </target>
<targetname="compile"depends="init"> <echo>编译源文件</echo> <javacsrcdir="${src.dir}"destdir="${build.classes}"> <classpathrefid="compile-path"></classpath> </javac> </target>
<targetname="compile.test"depends="compile"> <echo>编译测试文件</echo> <javacsrcdir="${test.src.dir}"destdir="${build.test.classes}"> <classpathrefid="compile-test-path"></classpath> </javac> </target>
<targetname="run.test"depends="compile.test"> <echo>运行单元测试</echo>
<junitprintsummary="false"haltonfailure="false"> <classpathrefid="run-test-path"></classpath> <formattertype="brief"usefile="false"/> <formattertype="xml"/> <batchtesttodir="${build.test.report}"> <filesetdir="${build.test.classes}"> <includename="${run.test.class}"/> </fileset> </batchtest> </junit> <echo>格式化测试报告</echo> <junitreporttodir="${build.test.report}"> <filesetdir="${build.test.report}"includes="TEST-*.xml"></fileset> <reportformat="frames"todir="${build.test.report}/html"/> </junitreport> </target>
</project> |
ant发送email
准备
发送email必须的jar包
在myeclipse中运行ant
添加运行时jar包(以上两个jar包)
或则将以上2个包拷贝到ant下面的lib目录中
build.xml文件
<?xml version="1.0" encoding="UTF-8"?> <projectname="ant-email"default="send.email"basedir="."> <propertyname="mail.to"value="464994911@qq.com,770459346@qq.com"> </property> <targetname="send.email"> <mailmailhost="smtp.163.com" cclist="${mail.to}"mailport="25"subject="Test ant-email"user="******"password="******"> <!--发送地址 --> <fromaddress="czb_yb@163.com"/> <!--接收地址 --> <toaddress="634496501@qq.com"/> <!--邮件内容 --> <!-- <message>中可以不用写死 可以从文件中读取 messagefile="发送邮件信息.txt" --> <message>test ant send eamil</message>
<!--发送附件--> <filesetdir="source"> <includename="*.jar"/> </fileset> </mail> </target> </project>
|
email常用属性说明
对于常见属性的说明: 1、 mailhost mail服务器的地址
|
ant上传ftp
所需jar包
build.xml
<?xml version="1.0" encoding="UTF-8"?> <projectname="ant-ftp"default="sendFilesToFTP"basedir="."> <targetname="sendFilesToFTP"> <ftpserver="127.0.0.1"port="21"userid="***"password="***"remotedir="/"depends="yes"verbose="yes"> <!--要上传的文件 --> <filesetdir="source"> <includename="*.jar"/> </fileset> </ftp> </target> </project> |
ftp参数说明
属性 | 描述 | 是否必须 |
server | ftp服务器地址 | Yes |
port | 端口号,默认21 | No |
userid | ftp用户名 | Yes |
password | ftp口令 | Yes |
remotedir | 服务器目录 | No |
action | ftp指令:默认 "send". 支持命令包括"put", "get", "del", "list", "chmod", "mkdir", "rmdir", and "site". | No |
binary | 传输方式 yes:二进制传输,默认 no:asc传输 | No |
passive | ftp传输模式: yes:被动传输模式 no:主动传输模式,默认 | No |
verbose | 打印传输信息 yes:默认显示 no:不显示". | No |
ant执行SQL
准备
数据库驱动包
build.xml
<?xml version="1.0" encoding="UTF-8"?> <projectname="ant-sql"default=""basedir="."> <pathid="driver"> <filesetdir="lib"> <includename="*.jar"/> </fileset> </path> <sqldriver="com.mysql.jdbc.Driver"password="root"url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8"userid="root"> <!--数据库驱动包 --> <classpathrefid="driver"></classpath> <!--需要执行的sql文件 --> <filesetdir="source"> <includename="*.sql"/> </fileset> </sql> </project> |
ant自定义task
自定义任务类,继承Task类
package com.ccc.ant.task;
import org.apache.tools.ant.Task;
publicclass MyTaskextends Task { private Stringmessage;
@Override publicvoid execute(){ System.out.println(message +"--->" + System.currentTimeMillis()); }
public String getMessage() { returnmessage; }
publicvoid setMessage(String message) { this.message = message; }
}
|
build.xml
<?xml version="1.0" encoding="UTF-8"?> <projectname="ant-custum-task"default="main"basedir="."> <targetname="init"> <mkdirdir="build/classes"/> </target> <targetname="compile"depends="init"> <javacsrcdir="src"destdir="build/classes"> <classpath> <filesetdir="lib"> <includename="*.jar"/> </fileset> </classpath> </javac> </target>
<!--自定义任务 --> <targetname="mytask"depends="compile"> <taskdefname="mytask"classname="com.ccc.ant.task.MyTask"> <classpath> <dirsetdir="build/classes"> </dirset> </classpath> </taskdef> </target>
<targetname="main"depends="mytask"> <!-- messages参数传递 --> <mytaskmessages="Hello World!"/> </target> </project>
|