Ant
2016-01-25 20:01
288 查看
安装
官网下载压缩包,解压设置环境变量
默认在当前目录下寻找build.xml文件来进行构建和执行
ant -f helloworld.xml 可以带参数来指定要执行的文件
build.xml文件要放在项目的根目录下,和src并列
自动处理路径中的正反斜杠的问题
Ant还包含了CVS版本控制的标签,没有添加,等找到git的在补全吧
实例
创建文件夹
<?xml version="1.0" encoding="UTF-8"?> <project default="init" name="Project"> <!-- name属性可以省略 --> <target name="init"> <mkdir dir="helloworld\a" /> <mkdir dir="hello" /> </target> </project>
删除目录,可以是非空目录
<?xml version="1.0" encoding="UTF-8"?> <project default="init"> <!-- 必须有一个且仅有一个根元素project,每个生成文件由一个project元素组成 --> <target name="init"> <!-- 一个project可以包含多个target,一个target可以做一个或多个事情 --> <delete dir="helloworld" /> </target> </project>
执行顺序 属性 修饰description
target的位置不重要,是靠depends属性来决定先后顺序的<?xml version="1.0" encoding="UTF-8"?> <project default="second"> <!-- 会根据这里的default去寻找对应的target --> <description> <!-- 描述性内容,可以省略 --> hello world </description> <property name="hello" value="welcome" /> <target name="init" description="helloworld"> <!-- description可以省略 --> <mkdir dir="helloworld\a" /> <mkdir dir="hello" /> <mkdir dir="${hello}" /> <!-- 这里用到了上面的定义的属性 --> </target> <target name="second" depends="init"> <!-- 执行这个以前会去先执行depends对应的targhet --> <mkdir dir="abc" /> <!-- 所以执行的顺序依然是init, second --> <mkdir dir="xyz" /> </target> </project>
如果用ant -f helloworld.xml second 就不会再去执行init了
ant init second 会按参数的顺序去执行,但second又是依赖于init的,所以init会显示执行了两次
执行顺序二
<?xml version="1.0" encoding="UTF-8"?> <project default="package" basedir="."> <!-- basedir指向的是根目录 --> <target name="init" /> <!-- 可以看到这里的init只执行了一次 --> <target name="preprocess" depends="init" /> <target name="compile" depends="init,preprocess" /> <!-- 用逗号链接,不是空格 --> <target name="package" depends="compile" /> </project>
综合
<?xml version="1.0" encoding="UTF-8"?> <project default="package"> <!-- 会根据这里的default去寻找对应的target --> <property name="compile" value="compile" /> <property name="dist" value="dist" /> <property name="src" value="src" /> <target name="init" /> <!-- 可以看到这里的init只执行了一次 --> <target name="preprocess" depends="init"> <mkdir dir="${compile}" /> <mkdir dir="${dist}" /> </target> <target name="compile" depends="init,preprocess" /> <!-- 用逗号链接,不是空格 --> <target name="package" depends="compile" /> <target name="MyCompile" depends="preprocess"> <javac srcdir="src" destdir="${compile}"> <!-- 执行这个target的时候,会自动去编译srcdir目录下的所有文件 --> </javac> <!-- 生成class文件,destdir如果不设置默认就是当前文件 --> </target> <target name="dist" depends="MyCompile"> <tstamp></tstamp> <!-- 这里先预定义一下tstamp,DSTAMP自动生成时间戳 --> <jar destfile="${dist}/package-${DSTAMP}.jar" basedir="${compile}"> <!-- 基于basedir目录,也就是class文件来生成jar文件 --> <manifest> <!-- 指定对清单文件设置哪些属性 --> <attribute name="Built-By" value="${user.name}" /> <!-- user.name内置属性,表示当前的用户名 --> <attribute name="Main-Class" value="com.shengsiyuan.image.google.Test" /> </manifest> <!-- 靠Main-Class这个属性来实现双击运行,Build-By是解释性的 --> </jar> </target> <target name="deleteFile"> <delete file="${dist}/packagexxx.jar"></delete> <!-- 这个是删除单个文件,不是文件夹 --> <delete dir="${dist}"></delete> <!-- 删除目录,可以是非空 --> </target> <target name="copyFile"> <copy file="src/test.java" tofile="c:/test2.java"></copy> <!-- 复制并重命名 --> <copy file="src/test.java" todir="c:/"></copy> </target> <target name="moveFile"> <move file="src/test.java" todir="c:/"></move> <!-- 移动文件,也可以使用tofile来重命名 --> </target> <target name="compress" depends="MyCompile"> <zip destfile="${dist}" basedir="${compile}"></zip> </target> <target name="uncompress" depends="compress"> <unzip dest="${dist}" src="${dist}/package.zip"></unzip> </target> <target name="replaceOperation"> <replace file="input.txt" token="how" value="what" summary="on"></replace> <!-- token表示要被替换的字符串,summary属性会输出修改的数目 --> </target> <target name="copy2"> <copy todir="${dist}"> <fileset dir="src"> <!-- fileset默认包含src目录下的所有文件 --> <include name="**/*.java" /> </fileset> </copy> <!-- */*.java 表示匹配当前目录下的java文件,**/*.java 表示匹配所有目录下的java文件 --> </target> <taskdef name="myFileSorterExample" classname="com.shengsiyuan.ant.tools.extend.FileSorter" classpath="bin"></taskdef> <!-- classname中的类是自己编写的,继承自org.apache.tools.ant.Task,并重写execute(),具体请见圣思园Ant第4集视频 --> <!-- classpath放的是自己编译好的class文件的路径--> <target name="myFileSorter"> <myFileSorterExample srcFile="input.txt" destFile="output.txt" /> </target> </project>
相关文章推荐
- 2015年终总结
- 极客DIY:廉价电视棒玩转GNSS-SDR,实现GPS实时定位
- HDU-1864-最大报销额【01背包】
- 用Jersey构建RESTful服务7--Jersey+SQLServer+Hibernate4.3+Spring3.2
- 要开始算法了 什么顺序呢?
- 解决Apache日志"internal dummy connection"方法
- 老人带娃常说这8句话,都要注意纠正啦~
- 【暴力搜索】【莫队算法】【贪心】[Codeforces Round #340 (Div. 2) ]题解报告
- 爬虫系列之一 基础知识
- Android之WebRTC介绍(二)
- 前端Mvvm QC 上传了测试版
- centos设置服务开机自启动
- Java反射机制(2)
- 如何使用shell脚本对android手机的操作---初级篇1
- ios app崩溃的时候如何通过代码层面确定崩溃位置
- Xshell
- 几种控制器跳转的效果区别
- 2016/1/25
- linux下C语言ip有关
- MySQL user表简介