ant详解
来源:互联网 发布:威少数据刷子 编辑:程序博客网 时间:2024/05/20 17:08
ant
目录
简介...2
优点...2
安装...2
下载ant.2
环境搭建...2
myeclipse中ant配置...3
ant之初体验...4
使用jdk提供的命令手动编译运行...4
使用ant编译...5
参数属性...6
ant命令参数...6
ant系统属性参数...7
ant自定义属性参数...7
一、在构建文件中定义...7
二、使用属性文件定义...7
三、控制台定义...7
在构建文件中引用...7
构建文件属性...8
一、日期...8
自定义日期格式...8
二、文件操作...8
三、指定一组特定目标执行...9
四、生成文档...9
五、打包操作...9
构建web项目...10
build.xml10
ant集成junit.11
build.xml11
ant发送email13
准备...13
build.xml文件...14
email常用属性说明...15
ant上传ftp.16
所需jar包...16
build.xml16
ftp参数说明...16
ant执行SQL.17
准备...17
build.xml17
ant自定义task.18
自定义任务类,继承Task类...18
build.xml18
简介
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/>
<!--mkdir 元素用来创建目录 dir 属性用来指定目录路径-->
<!--delete 元素用来删除目录 ${buildDir} 引用 property 元素指定的 name 为 buildDir 的属性变量-->
<mkdir dir="${buildDir}"/>
<mkdir dir="${distDir}"/>
<!--文件操作:
<copy file="src/Test.java" tofile="src/TestCopy.java"/> 把文件 Test.java 拷贝一份 TestCopy.java
<move file="src/Test.java" tofile="src/TestCopy.java"/> 把文件 Test.java 重新命名为 TestCopy.java
<copy file="src/Test.java" todir="archive"/> 把文件 Test.java 从 src 目录复制一份到 archive 目录下
<move file="src/Test.java" todir="archive"/> 把文件 Test.java 从 src 目录下移动到 archive 目录下
<replace file="input.txt" token="old" value="new"/>replace 任务,它执行文件中的查找和替换操作。
token 属性指定要查找的字符串,
value 属性指定一个新的字符串,
查找到的标记字符串的所有实例都被替换为这个新的字符串.
替换操作将在文件本身之内的适当位置进行。为了提供更详细的输出,可把 summary 属性设置为
true。这将导致该任务输出找到和替换的标记字符串实例的数目。
<copy todir="archive">---使用模式匹配复制多个文件
<fileset dir="src">--fileset 代替 file 属性
<include name="*.java"/>--包含 src 目录下所有的 *.java 文件
<exclude name="*.class"/>--不包含 src 目录下所有的 *.class 文件
</fileset>
</copy>-->
</target>
三、指定一组特定目标执行
<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">
<!--zip 元素用来创建 zip 包,和 jar 元素相似-->
<zip destfile="output.zip" basedir="output"/>
<!--相同的语法也可用于创建 tar 文件。 还可以使用 GZip 和 BZip 任务来压缩文件。-->
<tar destfile="output.tar" basedir="output"/>
<gzip src="output.tar" zipfile="output.tar.gz"/>
<!--解压缩和提取文件同样也很简单.-->
<unzip src="output.tar.gz" dest="extractDir"/>
<!--还可以包括 overwrite 属性来控制覆盖行为。默认设置是覆盖与正在被提取的归档文件中的条目相
匹配的所有现有文件。相关的任务名称是 untar、unjar、gunzip 和 bunzip2。-->
</target>
构建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服务器的地址
2、 mailport mail服务器的端口
3、 replyto 回复mail地址
4、 tolist 收件地址列表 可用子标签替代
5、 cclist 抄送地址列表 可用子标签替代
6、 bcclist 暗送地址列表 可用子标签替代
7、 message 邮件内容 一个或多个<message>子标签替代
8、messagefile 文件列表文件内容将被做为邮件内容, 一个或多个<message>子标签替代
9、messagemimetype邮件类型,默认为text/plain
10
、
filset附件列表多个附件逗号或空格隔开用<fileset>子标签替代
11、user 发送邮箱的用户名
12、password发送邮箱的密码
13、 subject 邮件标题
14、 charset字符集
15、 encode 编码
16、 ssl 是否使用 TLS/SSL
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>
- ant详解
- ant详解
- Ant详解
- Ant详解
- ant 详解
- Ant详解
- ant详解
- Ant详解
- ANT详解
- ANT详解
- ANT详解
- Ant详解
- ant详解
- Ant 详解
- Ant详解
- Ant详解
- Ant详解
- Ant详解
- thinkphp3.2学习记录
- mybatis例子一
- 读《软件驱魔》调试和优化遗留代码的艺术
- [Python] partial改变方法默认参数
- 怎样花两年时间去面试一个人
- ant详解
- HDU 4267 A Simple Problem with Integers
- 智能手机数据恢复怎么操作
- Offline Edits Viewer Guide
- PDF 函数
- [ZOJ 2715] Insecure in Prague [搜索]
- shell编程之给变量赋值的五种方法
- spring+mabatis+mysql
- Chapter 1 Securing Your Server and Network(14):限制功能——xp_cmdshell 和OPENROWSET