51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 6425|回复: 0
打印 上一主题 下一主题

Ant笔记

[复制链接]
  • TA的每日心情
    无聊
    2024-11-5 10:03
  • 签到天数: 77 天

    连续签到: 1 天

    [LV.6]测试旅长

    跳转到指定楼层
    1#
    发表于 2018-6-15 16:31:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    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
    1. <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文件完成上面的步骤,内容如下:
    1. <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>
    2. </p><p>    <target name="init"></p><p>        <mkdir dir="${dest}" /></p><p>    </target></p><p>
    3. </p><p>    <target name="compile" depends="init"></p><p>        <javac srcdir="${src}" destdir="${dest}" /></p><p>    </target></p><p>
    4. </p><p>    <target name="jar" depends="compile"></p><p>        <jar jarfile="${hello_jar}" basedir="${dest}" /></p><p>    </target></p><p>
    5. </p><p>    <target name="run" depends="jar"></p><p>        <java classname="test.ant.HelloWorld" classpath="${hello_jar}" /></p><p>    </target></p><p>
    6. </p><p>    <target name="clean"></p><p>        <delete dir="${dest}" /></p><p>        <delete file="${hello_jar}" /></p><p>    </target></p><p>
    7. </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包
    1. <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>

    传递参数运行
    1. <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>
    复制代码


    发布程序
    1. <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的任务
    1. <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>
    2. </p><p>            <include name="com/***/util/**"/></p><p>        </packageset></p><p>    </javadoc></p><p></target></p>
    复制代码


    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏1
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-25 00:46 , Processed in 0.062904 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表