您的位置:首页 > 其它

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: