china-bobi 发表于 2018-6-17 11:26:25

Ant

Ant笔记
http://bbs.51testing.com/forum.php?mod=viewthread&tid=1179294&fromuid=15243716
(出处: 51Testing软件测试论坛 )

ANT常用命令
ant:使用当前目录下的build.xml运行Ant,执行缺省的target。
ant -buildfile test.xml:使用当前目录下的test.xml运行Ant,执行缺省的target。

ant -file test.xml:使用当前目录下的test.xml运行Ant,执行缺省的target。

ant -f test.xml:使用当前目录下的test.xml运行Ant,执行缺省的target。
ant -f test.xml dist:使用当前目录下的test.xml运行Ant,执行一个叫做dist的target。
ant -buildfile test.xml -Dbuild=build/classes dist 执行test.xml 中dist的target,并设定build属性

Ant核心概念简介
project:每个构建文件包含一个工程。
depends:每个工程包含若干个目标(target)。目标可以依赖于其他的目标。
task:目标包含一个或多个任务(task)。

ANT示例

目录结构文字说明
    在建立build.xml文件之前,我们先说下目录结构:
    工程主目录: C:/course/ant/demo
    源程序目录: /src
    编译后的 class文件目录:/classes
    打包好的jar程序目录:/hello.jar
    工程配置文件:/build.xml

首先,我们使用文本编辑器写第一个程序:HelloWorld.java
<p>package test.ant;</p><p>public class HelloWorld {</p><p>    public static void main(String[] args)</p><p>      System.out.println(“hello world”);</p><p>    }</p><p>}</p><p></p>
复制代码

再建立一个build.xml文件完成上面的步骤,内容如下:
<p><?xml version="1.0" encoding="UTF-8" ?></p><p><project name="HelloWorld" default="run" basedir="."></p><p>    <property name="src" value="src" /></p><p>    <property name="dest" value="classes" /></p><p>    <property name="hello_jar" value="hello.jar" /></p><p>
</p><p>    <target name="init"></p><p>      <mkdir dir="${dest}" /></p><p>    </target></p><p>
</p><p>    <target name="compile" depends="init"></p><p>      <javac srcdir="${src}" destdir="${dest}" /></p><p>    </target></p><p>
</p><p>    <target name="jar" depends="compile"></p><p>      <jar jarfile="${hello_jar}" basedir="${dest}" /></p><p>    </target></p><p>
</p><p>    <target name="run" depends="jar"></p><p>      <java classname="test.ant.HelloWorld" classpath="${hello_jar}" /></p><p>    </target></p><p>
</p><p>    <target name="clean"></p><p>      <delete dir="${dest}" /></p><p>      <delete file="${hello_jar}" /></p><p>    </target></p><p>
</p><p>    <target name="rerun" depends="clean, run"></p><p>      <ant target="clean" /></p><p>      <ant target="run" /></p><p>    </target></p><p></project></p>
复制代码


解释以上Ant配置文件
<project name="HelloWorld" default="run" basedir="."/>
Ant的所有内容必须包含在这个里面,name是我们给它取的名字,
basedir看名字就知道是工作的根目录。其中的”.”代表当前目录。
default代表默认要做的事情。

<property name="src" value="src" />
<property name="dest" value="classes" />
<property name="hello_jar" value="hello.jar" />
类似程序中的变量

<target name="init">
    <mkdir dir="${dest}" />
</target>
目的:创建一个文件夹
把我们想做的每一件事写成一个target,它有一个名字。使用mkdir来创建文件夹

<target name="compile" depends="init">
    <javac srcdir="${src}" destdir="${dest}" />
</target>
目的:编译程序,把源程序编译到目标地点
depends 是它所依赖的target,依赖的target会先执行

<target name="jar" depends="compile">
    <jar jarfile="${hello_jar}" basedir="${dest}" />
</target>
目的:打jar 包

<target name="run" depends="jar">
    <java classname="test.ant.HelloWorld" classpath="${hello_jar}" />
</target>
目的:运行jar包内的程序


<target name="clean">
    <delete dir="${dest}" />
    <delete file="${hello_jar}" />
</target>
目的:删除生成的文件

<target name="rerun" depends="clean, run">
    <ant target="clean" />
    <ant target="run" />
</target>
目的:再次运行,这里显示了如何在一个 target 里边调用其他的 target


步骤再重申一遍:
建一个src文件夹,然后写一个HelloWorld.java,按照包结构目录放进去;
写build.xml文件
在命令行输入 cmd, ant做测试。

project属性
name    项目名称,可自由定义。
default    定义一个缺省(默认)的target,指定target的build.xml时,就会执行这个缺省的target。
basedir    用于定义项目的基路径。
description    表示项目的描述

property属性
将属性名放在“${}”之间并放在属性值的位置来实现的
首先设定property:
    <property name="src" value="src" />
    <property name="dest" value="classes" />
然后在其他地方引用property:
    <target name="compile" depends="init">
      <javac srcdir="${src}" destdir="${dest}" />
    </target>

target属性
name    target的名字。
depends    用逗号分隔的target的名字列表,也就是依赖列表
if    执行target需要清除设定的属性名
unless    执行target需要清除设定的属性名
description    描述target的功能,这些描述可由-projexthelp 命令行输出。

Ant常用task
设置classpath
当需要指定类似路径的值时,可以使用嵌套元素。一般的形式是
<classpath>
    <pathelement path="${classpath}"/>
    <pathelement location="lib/jar.jar"/>
</classpath>
location属性指定了相对于project基目录的一个文件和目录
而path属性接受逗号或分号分隔的一个位置列表

输出信息
<echo message=”XXXXXX”>
<echo>XXXXXX</echo>


复制文件与目录<copy>
file表示源文件
tofile 表示目标文件

todir 表示目标目录

overwrite表示指定是否覆盖目标文件,默认值是不覆盖。
includeEmptyDirs 表示制定是否拷贝空目录,默认值为拷贝
failonerror 表示指定如目标没有发现是否自动停止,默认值是停止

复制一个文件到当前目录,并重命名
<copy file="myfile.txt" tofile="mycopy.txt"/>

复制一个文件到指定目录
<copy file="myfile.txt" todir="build /newdir"/>

复制一个文件到指定位置(使用copyfile)
<copyfile src="test.java" dest="subdir/test.java"/>

复制一个文件集合到一个目录
<copy todir="build/newdir"><fileset dir="src_dir"/></copy>

复制一个文件集合到一个目录,但不包含某些文件
<copy todir="dest/dir">
    <fileset dir="src_dir" excludes="**/*.java"/>
</copy>

删除文件与目录<delete>
file表示要删除的文件
dir表示要删除的目录
includeEmptyDirs 表示指定是否要删除空目录,默认值是删除。
failonerror 表示指定当碰到错误是否停止,默认值是自动停止

删除一个文件
<delete file="/lib/aaa.jar"/>

删除一个目录
<delete dir="lib"/>

删除一个目录下符合规则的文件,包括子目录。这里是删除.bak文件
<delete>
    <fileset dir="." includes="**/*.bak"/>
</delete>


删除一个目录下所有文件和目录,包括当前目录
<delete includeEmptyDirs="true">
    <fileset dir="build"/>
</delete>
<fileset dir="build"/>也可以写成<fileset dir="build" includes="**/*"/>

删除当前目录下所有的svn相关文件
<delete defaultexcludes="false">
    <fileset dir="src" includes="**/*.svn"/>
</delete>

删除文件目录树
<deltree dir="dist"/>

建立目录<mkdir>
<mkdir dir="./build/lib"/>
<mkdir dir="${dist}/lib"/>


打jar包
<p><target name="jar" depends="compile"></p><p>    <jar jarfile="${hello_jar}" basedir="${dest}" /></p><p></target></p><p>或者</p><p><jar destfile="${dist}/lib/app.jar"</p><p>       basedir="${build}/classes"</p><p>       includes="mypackage/test/**"</p><p>       excludes="**/*Test*.class"</p><p>/></p><p></p>
复制代码

运行jar包
<target name="run" depends="jar">
    <java classname="test.ant.HelloWorld" classpath="${hello_jar}" />
</target>

传递参数运行
<p><java classname="test.Main"></p><p>    <arg value="-h"/> </p><p><classpath> </p><p>       <pathelement location="dist/test.jar"/></p><p><pathelement path="/Users/antoine/dev/asf/ant-core/bootstrap/lib/ant-launcher.jar /> </p><p></classpath> </p><p></java></p>
复制代码


发布程序
<p><property name="project.name" value="antdemo"/></p><p><property name="webserver" value="C:/java/tomcat-6.0.18/webapps" /></p><p><!-- 发布项目(其实就是WebContent目录)到web容器下 --></p><p><target name="deploy" depends="init,compile,test" description="将工程打成war包"></p><p>    <echo message="deploy项目到Web服务器" /></p><p>    <mkdir dir="${webserver}/${project.name}" /></p><p>    <copy todir="${webserver}/${project.name}" overwrite="true"></p><p>      <fileset dir="${WebContent.dir}" /></p><p>    </copy></p><p></target></p>
复制代码


用Ant完成生成javadoc的任务
<p><target name="create_doc"></p><p>    <javadoc destdir="${distDir}" encoding="UTF-8" docencoding="UTF-8" charset="utf-8"><!-- 防止中文乱码-></p><p>    <!-- dir是你的代码位置,记住是java文件的位置而不是class文件的位置--></p><p>      <packageset dir="${srcDir}"></p><p>            <!-- exclude是不想生成哪些类的javadoc --></p><p>            <exclude name="${excludeClasses}" /></p><p>
</p><p>            <include name="com/***/util/**"/></p><p>      </packageset></p><p>    </javadoc></p><p></target></p>
复制代码


海海豚 发表于 2018-6-19 10:48:55

谢谢分享~
页: [1]
查看完整版本: Ant