Ant任务

Posted jrri

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ant任务相关的知识,希望对你有一定的参考价值。

Ant标签解析

target

  • failonerroe:出现错误的时候停止,缺省值"true"

delete

  • includeemptydirs:是否删除空目录. 缺省"true"

replace

  • 指定文件,寻找标识,替换其内容
  • file:指定文件
  • token:标识符号为
  • value:需要替换的内容
<replace file="aaa.xml" token="@BUILD_MODE@" value="Mode.SIT" encoding="UTF-8" />

jar

.class打包为.jar

  • basedir:类所在的基目录
  • destdir:放打包好的jar包的目录

filterset

一组过滤器的集合,里面存放filter

  • filter
  • token:过滤器的标识
  • value:过滤器的值
    filter的使用和replace几乎是一样的

fileset

一组文件的集合

  • dir:指定文件夹
  • exclude:排除哪些文件
  • include:包含哪些文件

include

  • name="** /* .jar" 需要包含的文件名.
  • ** /* .jar 文件树下所有的jar包
    • .jar 当前目下的jar包

ant标签, antfile标记

<target name="zip">
	<ant antfile="build.xml" dir="../../" />
	<ant antfile="push_sit.xml" dir="../../" />
</target>

antcontrib

ant判断

ant脚本自带的语法.condition
可以使用且常用的标签:

  • isture: 真假判断
  • not:非
  • and:与
  • or:或
  • available:值是否可用
  • isset:查看值是否存在
  • equals:对比两个值是否一致, 标签内放置两个数值, 判断是否一致.
<equals arg1="${var}" arg2="123"></equals>
  • filesmatch:比较文件是否一致.

contrib

ant脚本不支持循环, if, 等标签.
想要使用逻辑判断的话,需要再nat中添加依赖.ant-contrib
%ant%/lib/ant-contrib
添加该依赖之后, 然后在xml脚本中引用.
引用语法:

<taskdef resource="net/sf/antcontrib/antlib.xml" />

该语法推荐放在xml脚本的project标签内的第一行.
放在project外面无法使用,放在靠后则前半段无法使用.

for循环

依赖contrib
默认标签为foreach
foreach内,放置三个属性:

  1. list:包含多个变量的列表
  2. param:参数,每次循环从列表中取出来的值.
  3. target:每次循环把参数传入目标target, 执行一次.

在循环中可以设置parallel[平行]和maxThread[最大线程]参数.

语法如下:

<taskdef resouce="net/sf/antcontrib/antlib.xml" />
<target name="foreach">
	<foreach target="show" list="1,2,3,4" param="var" parallel="True" maxThreads="3">
	</foreach>
</target>
<target name="show">
	<echo message="${var}"></echo>
</target>

声明list

在ant脚本中, 声明属性通过<property>标签
声明列表也同样如此.
不过在声明列表的时候, 需要注意:
list属性,同样是一个字符串
多个属性中间,分割.
属性之间,不能有任何 空格,否则切割出来的值也会有 空格,会影响判断结果.

contrib中常用的判断组合

if then else
一般搭配ant自带的值相等判断的equals

<if>
	<equals arg1="${var}" arg2="123" />
	<then>
		<echo message="${var} == 123" />
	</then>
	<else>
		<echo message="${var} != 123" />
	</else>
</if>

关于foreach/for;$@的区别

循环的两种形式:

  • foreach
    针对的是, 转换任务的遍历方式, 通过depends标签,能够使所有的任务都能共享到该循环变量.
    antcall可以通过param标签来继承属性.

  • for
    针对的是单个任务中的遍历. 循环体需要嵌套在sequential标签内部.
    两个属性:list,param
    变量使用:@{var}

<for list="1,2,3,4" param="var">
	<sequential>
		<echo message="@{var}"></echo>
	</sequential>
</for>

关于for内switch内设置property

关于属性
<property>是声明属性, 无法多次设置同一个参数.
<property>只能初始化属性,却不能改变已设置属性的值.
如果需要改变属性, 则需要使用antcontrib内的<var>标签

<property name="label" value="5" />
<!-- label==5 -->

<property name="label" value="4" />
<!-- label==5 -->

<var name="label" value="3"/>
<!-- label==3 -->

关于依赖

在使用ant解决依赖的时候
通常使用三种方式:

  1. 常规依赖,直接添加jar包即可.使用<classpath>标签
  2. 循环依赖, 使用<sourcepath>,直接使用源码.
  3. EOS普元, 找到EOS的workspace,对应的lib. 整个导入.
























以上是关于Ant任务的主要内容,如果未能解决你的问题,请参考以下文章

Ant 条件任务

Ant替换FTP文件中的任务

使用带有本机扩展的ant mxmlc任务

ant xjc 任务与 jdk 6 一起工作

译文:18个实用的JavaScript代码片段,助你快速处理日常编程任务

Flyway Ant 任务在没有 Ant 的调试模式的情况下显示迁移错误