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

 

 

0 0