ant详解

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 属性来控制覆盖行为。默认设置是覆盖与正在被提取的归档文件中的条目相
            匹配的所有现有文件。相关的任务名称是 untarunjargunzip  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&amp;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>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值