Ant生成工具
Ant是适用于JAVA项目的生成工具,类似于C与C++项目中的make,以下是我学习过程中的一点笔记
target
target指定项目规定的顺序。
例:
<target name="init" />
<target name="preprocess" depends="init"/>
<target name="compile" depends="init, preprocess"/>
<target name="package" depends="compile"/>
depends指定在到达当前target的依赖,即必须先完成depends指定的target。
编译
例:
<javac srcdir="src" destdir="dest"/>
这个标签寻找src目录中以.java为扩展名的所有文件,并对它们调用javac编译器,将生成的类文件放到dest中。
其他参数:
- classpath:等价于javac的-classpath选项
- debug=“true”:指示编译器应该带调试信息编译源文件
压缩打包
例:
<jar destfile="package.jar" basedir="classes"/>
创建一个名为package.jar的JAR文件,并把classes目录的所有文件添加到其中。(JAR 文件能够包含任意类型的文件,而不只是类文件)。此处没有指定清单文件,因此 Ant 将提供一个基本的清单文件。
同理,创建zip压缩文件如下:
<zip destfile="output.zip" basedir="output"/>
解压缩
<unzip src="output.tar.gz" dest="extractDir"/>
清单文件
例:
<jar destfile="package.jar" basedir="classes">
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Main-class" value="package.Main"/>
</manifest>
</jar>
manifest 属性允许指定一个用作该 JAR 文件的清单的文件。 清单文件的内容还可以使用 manifest 任务在生成文件中指定。这个任务能够像文件系统写入一个清单文件,或者能够实际嵌套在 jar 之内,以便一次性地创建清单文件和 JAR 文件
完整ANT例子
<?xml version="1.0"?>
<project default="dist" name="Project Argon">
<description>A simple Java project</description>
<property name="srcDir" location="src"/>
<property name="buildDir" location="build"/>
<property name="distDir" location="dist"/>
<target name="init">
<tstamp/>
<mkdir dir="${buildDir}"/>
<mkdir dir="${distDir}"/>
</target>
<target name="compile" depends="init">
<javac srcdir="${srcDir}" destdir="${buildDir}"/>
</target>
<target name="dist" depends="compile">
<jar destfile="${distDir}/package-${DSTAMP}.jar" basedir="${buildDir}">
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Main-Class" value="package.Main"/>
</manifest>
</jar>
<jar destfile="${distDir}/package-src-${DSTAMP}.jar" basedir="${srcDir}"/>
</target>
<target name="clean">
<delete dir="${buildDir}"/>
</target>
</project>
文件操作
添加目录
<mkdir dir="archive/metals/zinc"/>
删除目录
<delete dir="archive/metals/zinc"/>
复制
<copy file="src/Test.java" tofile="src/TestCopy.java"/>
重命名
<move file="src/Test.java" tofile="src/TestCopy.java"/>
文件复制或移动到另一个目录
<copy file="src/Test.java" todir="archive"/>
<move file="src/Test.java" todir="archive"/>
替换
例:
<replace file="input.txt" token="old" value="new"/>
替换操作将在文件本身之内的适当位置进行。为了提供更详细的输出,可把 summary 属性设置为 true。这将导致该任务输出找到和替换的标记字符串实例的数目
模式匹配
* 匹配零个或多个字符
?匹配一个字符
将file替换成fileset即可使用模式匹配
例:
<copy todir="archive">
<fileset dir="src">
<include name="*.java"/>
</fileset>
</copy>
fileset 默认情况下包含指定 src 目录下的所有文件,因此为了仅选择 .java 文件,我们对模式使用一个 include 元素。类似地,我们可以对另一个模式添加一个 exclude 元素,从而潜在地排除include指定的匹配项。 甚至可以指定多个include 和 exclude 元素; 这样将得到一组文件和目录,它们包含 include 模式的所有匹配项的并集,但排除了 exclude 模式的所有匹配项