project

项目定义,一个ant文件就是一个 project,定义了项目名称,起始位置以及默认执行的 target。

<project name="Easily" basedir="." default="build">

property

属性定义,可以定义的属性包括:文件属性、字符串定义。

<property file="build.properties"/>
<property name="WIDTH" value="1200"/>
<property name="HEIGHT" value="750"/>
<property name="PROJECT_DIR" value="${basedir}/../"/>
<property name="SOURCE_DIR" value="${PROJECT_DIR}/src"/>

taskdef

任务定义,可以理解为具体执行的任务所需要的第三方库,比如编译 as3 就需要引入 flexTasks.jar ,比如在代码中需要用到 Math 的时候,需要引入 include Math,同样的道理。

<taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}/ant/lib/flexTasks.jar"/>

target

可以理解为 method,是 ant 执行的最小单位,每个 target 会有一个名称,可以主动的调用执行 。

<target name="build">

antcall

target 调用,用于执行 target 。

<antcall target="buildswf"/>

mxmlc

编译 as3 项目,生成 swf 文件,需要指定入口文件 file,输出文件 output 。

  • incremental 是否增量编译
  • define 编译参数
  • load-config 项目配置文件,有需要的话可以自己编写,没有不声明也可以
  • static-link-runtime-shared-libraries 运行时库是否静态链接
  • compiler.debug 调试信息
  • default-size 缺省尺寸
  • compiler.include-libraries 将指定目录下的 swc 文件编译进目标文件,不管项目中是否引用
  • compiler.library-path 将指定目录下的 swc 文件引入项目中,并将引用到的部分代码编译进目标文件
  • compiler.external-library-path 将指定目录下的 swc 文件引入项目中,作为外部链接,注意,运行时如果没有找到相关定义会报错
  • source-path 外部文件引用
<mxmlc file="${SOURCE_DIR}/Easily.as"
output="${OUTPUT_DIR}/Easily.swf"
show-actionscript-warnings="false"
actionscript-file-encoding="UTF-8"
keep-generated-actionscript="true"
use-resource-bundle-metadata="true"
incremental="false"> <define name="CONFIG::debug" value="true"/> <load-config filename="${FLEX_HOME}/frameworks/flex-config.xml"/>
<static-link-runtime-shared-libraries>true</static-link-runtime-shared-libraries>
<compiler.debug>true</compiler.debug> <!-- Set size of output SWF file. -->
<default-size width="${WIDTH}" height="${HEIGHT}"/> <!-- Include all these swcs -->
<compiler.include-libraries dir="${LIBS_DIR}" append="true">
<include name="*.swc" />
<exclude name="data.swc"/>
</compiler.include-libraries> <!-- Include the useful swcs -->
<compiler.library-path dir="${LIBS_DIR}" append="true">
<include name="*.swc"/>
</compiler.library-path> <!-- Reference the external swcs -->
<compiler.external-library-path dir="${LIBS_DIR}" append="true">
<include name="*.swc" />
</compiler.external-library-path> <source-path path-element="F:/My Documents/SVN/Box2D/src"/>
</mxmlc>

compc

编译 as3 项目,输出 swc 库,大部分选项都同 mxmlc ,需要注意的是 include-classes ,这个参数需要指定哪些类需要编译进 swc 中,格式是以空格为分隔符的类的字符串列表,比如: org.easily.astar.AStar org.easily.astar.BinaryHeap org.easily.astar.Grid org.easily.astar.Node

<compc output="${OUTPUT_DIR}/easily.swc"
include-classes="${CLASSES}"
optimize="true"
benchmark="true"
strict="true"
actionscript-file-encoding="utf-8"
locale="en_US"
allow-source-path-overlap="true"
use-resource-bundle-metadata="true"
incremental="false"> <static-link-runtime-shared-libraries>true</static-link-runtime-shared-libraries>
<compiler.debug>false</compiler.debug>
<show-actionscript-warnings>false</show-actionscript-warnings> <load-config filename="${FLEX_HOME}/frameworks/flex-config.xml"/>
<source-path path-element="${SOURCE_DIR}"/>
<library-path dir="${PROJECT_DIR}/libs" includes="*" append="true"/>
<source-path path-element="F:/My Documents/SVN/Box2D/src"/>
</compc>

可以将类的定义放到另外一个文件中,比如 class.properties ,定义一个属性为 CLASSES=xx xx xx,ant 是有相关的 api 可以将相关的类定义找到并处理好,只是语法过于拧巴,我写了个 python 脚本来干这个事情:

import os

def findmatch(file_name, ext, excludes):
for exclude in excludes:
if file_name.find(exclude) != -1:
return False
return file_name.endswith(ext) def list_file(dir_name, ext, excludes):
result = []
for root, dirs, files in os.walk(dir_name):
result.extend(os.path.join(root, file_name) for file_name in files if findmatch(file_name, ext, excludes))
return result def list_class(root, root_sep, ext, excludes):
return (format_name(root_sep, file_name, ext) for file_name in list_file(root, ext, excludes)) def format_name(root_sep, file_name, ext):
return file_name.replace(ext, "").replace(root_sep, "").replace("\\", ".") def export_file(root_list, ext, excludes, out_file):
with open(out_file, "w") as f:
f.write("CLASSES=")
for root in root_list:
f.writelines(class_name + " " for class_name in list_class(root, root + "\\", ext, excludes)) def main():
root_list = [os.getcwd()+"\\..\\src"]
ext = ".as"
excludes = ["Test.as"]
out_file = "class.properties"
export_file(root_list, ext, excludes, out_file) if __name__ == "__main__":
main()

exec

执行脚本或者应用程序,可以指定应用程序和命令行参数。

<exec executable="/bin/sh">
<arg line = "-c 'php ${basedir}/../xml.php'" />
</exec>

Ant 常用语法及选项的更多相关文章

  1. python MVC、MTV 框架介绍 Django 模板系统常用语法

    Django 框架简介一.MVC框架和MTV框架1.MVC 全名Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分.优势: 耦合性低 重用性高 生命 ...

  2. MySQL的DML常用语法格式

    MySQL的DML常用语法格式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们知道MySQL的查询大致分为单表查询,多表查询以及联合查询.多表查询,顾名思义,就是查询的结果可能 ...

  3. python3+selenium常用语法汇总

    Selenium常用语法总结 一.Selenium常用定位语法 1.元素定位 (1)ID定位元素: find_element_by_id(‘’) (2)通过元素的类名称定位元素: find_eleme ...

  4. iptables常用语法与案例

    常用命令语法: [root@www ~]# iptables [-t tables] [-L] [-nv] 选项与参数: -t :后面接 table ,例如 nat 或 filter ,若省略此项目, ...

  5. Markdown通用的常用语法说明

    前言 Markdown 是一种轻量级的 标记语言,语法简洁明了.学习容易,还具有其他很多优点,目前被越来越多的人用来写作使用. Markdown具有一系列衍生版本,用于扩展Markdown的功能(如表 ...

  6. Markdown简介以及常用语法

    Markdown简介以及常用语法 最近发现用markdown记录东西很方便,感觉和emacs的org mode很类似,但是windows下使用emacs不是很方便.特此记录一下markdown常用的语 ...

  7. Sql常用语法以及名词解释

    Sql常用语法以及名词解释 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) D ...

  8. Markdown常用语法

    什么是Markdown Markdown 是一种方便记忆.书写的纯文本标记语言,用户可以使用这些标记符号以最小的输入代价生成极富表现力的文档. 通过Markdown简单的语法,就可以使普通文本内容具有 ...

  9. 2 hive的使用 + hive的常用语法

    本博文的主要内容有: .hive的常用语法 .内部表 .外部表 .内部表,被drop掉,会发生什么? .外部表,被drop掉,会发生什么? .内部表和外部表的,保存的路径在哪? .用于创建一些临时表存 ...

随机推荐

  1. openWrt 安装与实践

    1. 先装一个编译用的环境, ubuntu 14 2. 在ubuntu里面安装svn, g++, libncurses5-dev git libssl-dev gawk, svn因为openwrt社区 ...

  2. Eclipse断点调试方法

    1. 条件断点 断点大家都比较熟悉,在Eclipse Java 编辑区的行头双击就会得到一个断点,代码会运行到此处时停止. 条件断点,顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,代码才 ...

  3. javascript 使用方法名作为参数

    Example <!DOCTYPE html> <html lang="en"> <head> <meta charset="u ...

  4. Eclipse解决Ctrl+c很卡的方法

    问题如下 : 每当在eclipse中开发java项目打开jsp页面编辑的时候,按了ctrl+c就会卡死几秒的状态,一天经常这样会让人非常的烦躁. 解决方法如下: Eclipse -- Windows- ...

  5. 一个jQ版大图滚动

    难得周末能休息,也是越发的代码难受,手就想敲点东西,这不闲着无聊敲了一个Jq版的大图滚动,不足之处大家批评指正: 运作环境win7,代码编辑器是:sublime; 我把源码复制了一下, <!do ...

  6. Hibernate之全面认识

    Hibernate体系架构 Hibernate通过配置文件管理底层的JDBC连接,将用户从原始的JDBC释放出来,使得用户无需再关注底层的JDBC操作,而是以面向对象的方式进行持久化操作.这种全面的解 ...

  7. 注释声明:TODO HACK XXX FIXME REVIEW

    注释有时候也可以用来给一段代码声明额外的信息.这些声明的格式以单个单词打头并紧跟一个冒号.可以使用的声明如下. TODO: 说明代码还未完成.应当包含下一步要做的事情. HACK: 表明代码实现走了一 ...

  8. ionic 中$ionicView.beforeEnter 事件的一个bug

    我在使用ionic写app的时候,需要使用$IonicView.beforeEnter事件,在页面进入前做一些事情,但是发现,它不起作用,很蛋疼,后来,看了别人做的app例子,也涉及到这个$Ionic ...

  9. java web使用gradle配置详情

    博客说明:本片博客为FSSARB项目片面部分,目前项目还在更新中,请持续关注... 序言 项目构建工具从ant到maven,再到gradle,这是在严峻的技术考验下不停过度的结果.依照百度百科的阐述, ...

  10. ES6 笔记

    1.箭头函数 箭头函数里的this会引用 定义 箭头函数时,外部作用域 的 this .箭头函数只是 引用 外部作用域的 this ,本身不存在 this.同时因为没有 this ,所以 无法用new ...