• Ant高级task


    一 Task的命令行参数

    有些task可接受参数,并将其传递给另一个进程。为了能在变量中包含空格字符,可使用嵌套的arg元素。

    Attribute Description Required

    value 一个命令行变量;可包含空格字符。只能用一个

    line 空格分隔的命令行变量列表。

    file 作为命令行变量的文件名;会被文件的绝对名替代。

    path 一个作为单个命令行变量的path-like的字符串;或作为分隔符,Ant会将其转变为特定平台的分隔符。

    例子

    <arg value="-l -a"/> 是一个含有空格的单个的命令行变量。

    <arg line="-l -a"/> 是两个空格分隔的命令行变量。

    <arg path="/dir;/dir2:\dir3"/> 是一个命令行变量,其值在DOS系统上为\dir;\dir2;\dir3;在Unix系统上为/dir:/dir2:/dir3 。

    二 时间戳<tstamp/>

    在生成环境中使用当前时间和日期,以某种方式标记某个生成任务的输出,以便记录它是何时生成的,这经常是可取的。这可能涉及编辑一个文件,以便插入一个字符串来指定日期和时间,或将这个信息合并到 JAR 或 zip 文件的文件名中。

    这种需要是通过简单但是非常有用的 tstamp 任务来解决的。这个任务通常在某次生成过程开始时调用,比如在一个 init 目标中。这个任务不需要属性,许多情况下只需 <tstamp/> 就足够了。

    tstamp 不产生任何输出;相反,它根据当前系统时间和日期设置 Ant 属性。下面是 tstamp 设置的一些属性、对每个属性的说明,以及这些属性可被设置到的值的例子:

    属性说明例子

    DSTAMP 设置为当前日期,默认格式为yyyymmdd 20031217

    TSTAMP 设置为当前时间,默认格式为 hhmm 1603

    TODAY 设置为当前日期,带完整的月份2003 年 12 月 17 日

    例如,在前一小节中,我们按如下方式创建了一个 JAR 文件:

    <jar destfile="package.jar" basedir="classes"/>

    在调用 tstamp 任务之后,我们能够根据日期命名该 JAR 文件,如下所示:

    <jar destfile="package-{DSTAMP}.jar" basedir="classes"/>

    因此,如果这个任务在 2003 年 12 月 17 日调用,该 JAR 文件将被命名为 package-20031217.jar。

    还可以配置 tstamp 任务来设置不同的属性,应用一个当前时间之前或之后的时间偏移,或以不同的方式格式化该字符串。所有这些都是使用一个嵌套的 format 元素来完成的,如下所示:

    <tstamp>

    <format property="OFFSET_TIME"

    pattern="HH:mm:ss"

    offset="10" unit="minute"/>

    </tstamp>

    上面的清单将 OFFSET_TIME 属性设置为距离当前时间 10 分钟之后的小时数、分钟数和秒数。

    用于定义格式字符串的字符与 java.text.SimpleDateFormat 类所定义的那些格式字符相同 。

    三 发送email的task

    使用SMTP服务器发送邮件

    例子:

    <mail mailhost="smtp.myisp.com" mailport="1025" subject="Test build">

    <from address="me@myisp.com"/>

    <to address="all@xyz.com"/>

    <message>The {buildname} nightly build has completed</message>

    <fileset dir="dist">

    <includes name="**/*.zip"/>

    </fileset>

    </mail>

    四 ssh和scp

    在ant中,使用ssh命令远程启动和停止另外一台机器上的tomcat

    下面是远程停止192.168.0.2这台机器上的tomcat:
    <target name="sshexecstop" >
    < sshexec host="192.168.0.2" username="root" password="123456" trust="true" command="cd /usr/local/tomcat/bin;./shutdown.sh" />
    < /target>

    下面是远程启动192.168.0.2这台机器上的tomcat:

    <target name="sshexecstart">

    <sshexec host="192.168.0.2" username="root" password="123456" trust="true" command="cd /usr/local/tomcat/bin;./startup.sh" />

    </target>


    在ant中,使用scp将本地的文件(appwar目录下的文件)远程拷贝到另外一台机器的tomcat下:
    <target name="copy" >
    < scp todir="root:123456@192.168.0.2:/usr/local/tomcat/webapps/" trust="true">
    < fileset dir="/home/cruisecontrol/projects/eholderWeb/build/appwar" />
    < /scp>
    < /target>

    五 input

    与用户交互输入的task
    < input message="请选择一个Target " validargs="compile,jar,test" addproperty="my.input"/>

    六 exec

    执行其他进程的task

    <exec executable="cmd.exe">
    <arg line="/c start http://localhost:8080>
    </exec>

    七其他的task

    if task
    ant原来可以在target级进行if判断(unless,if 属性),但实在太不方便了。

    Conditions
    但Ant预先封装的一堆condition很是很方便的。这些condition完全从实际出发,包括文件是否存在,http://localhost:8080是否连通都可以作为条件,见Ant的参考手册。

    For task
    支持"a,b,c,d" 字符串数组的循环与文件目录,Fileset的循环。

    Parallel task
    Parallel非常有用,比如我想一边开tomcat,一边做别的,就需要使用它,否则就只有用spawn=true属性把tomcat放在后台运行。spawn有很多不好的地方,比如不能即时在console看到信息,停止ant运行不能把tomcat关掉等。

    Parallel相当于一个容器,放在里面的每个task都会被并行执行。如果想把某几个task顺序执行,用相当于()的Sequential task 包起来。

    Waitfor task
    暂停ant执行直到条件符合,比如<waitfor><http url=http://localhost:8080/></waitfor>就会等待tomcat启动后才会继续往下执行。

    八 antcall 与ant

    depends:depends中的targets在本target执行前按照从左到右的定义顺序调用。

    antcall : 用来调用同一个build.xml中的其他的target,相当于高级语言中的函数调用。

    ant: 调用其他的build.xml中的target。

    九 自定义TASK的使用

    ANT已经内置了不少task,像copy、replace、javac等等,但是有时候还需要一些特定的任务来完成操作,比如在生成JAD文件 时,需要一个Midlet-Jar-Size的参数,得到JAR文件的大小,但是通过内部的task无法实现,因此可以自己编写类来实现此功能,但必须保 证该类是从Task类继承过来的。

    例:

    <taskdef name="filesize" classname="ant.FileSizeTask" classpath="${LIB_PATH}/FileSizeTask.jar" />

    <filesize file="${Base}/Demo_Build/${jarName}" property="size" />

    <replace dir="store" includes="${jadName}" encoding="UTF-8">

    <replacefilter token="@FILESIZE@" value="${size}" />

    </replace>



    完!

  • 相关阅读:
    算法:javascript截取字符串
    【转】解决memcached启动失败
    Ubuntu 16.04 安装 Apache, MySQL, PHP7
    phpstorm2016.3+xdebug调试
    (转)微信开发连接SAE数据库
    php图片上传服务器
    大数据整体市场规模达1000亿,金融、政务等行业应用占据七成份额
    “AI智客计划”
    人工智能 :眼纹识别技术大显神通,一眼认出你
    AI 芯片,是金山还是泡沫?
  • 原文地址:https://www.cnblogs.com/itech/p/2230414.html
Copyright © 2020-2023  润新知