1、Ant的用途
用于生成Java项目。
跨平台方式执行文件操作。
使用第三方Ant任务,编写自定义Ant任务。
2、Ant是什么
Apache Ant是一个基于Java的生成工具。是Another Neat Tool的缩写。生成工具在软件开发中用来将源代码和其他输入文件转换为可执行文件的形式。Ant与Make类似,但是具有跨平台的特色。
3、Ant生成文件剖析
每个生成文件由单个的Project元素组成,Project元素又包含多个target元素。一个target是生成过程中已定义的一个步骤。他执行任意数量的操作。操作本身是由其他专用任务标签执行的。顶级project元素包含一个default属性,在Ant被调用而没有指定目标时,这个属性将指定要执行的目标。然后需要使用target元素来定义该目标本身。
eg:
<?xml version="1.0"?>
<project default="init">
<target name="init">
</target>
</project>
3、添加描述
Ant自己添加了description元素和description属性。
4、Ant中的属性
属性一旦设置,就不可再改变。
申明属性的方法:
<property name="metal" value="beryllium"/>
使用属性的方法:
${metal}
eg:
<property name="metal_database" value="${metal}.db"/>
Ant自定义的属性:
${user.home}、${ant.version}、${basedir}等等。
Ant 的 location 属性专门设计用于以平台无关的方式包含文件系统路径。您会像下面这样使 用 location 来代替value:
<property name="database-file" location="archive/databases/${metal}.db"/>
5、定义依赖关系
target元素的depends属性确定依赖关系。eg:
<target name="compile" depends="init,preprocess"/>
与多个target有依赖关系时,中间用‘,’分开
6、Ant的运行
Ant可以在集成开发环境下(IDE)运行,也可以在命令行运行。
在命令运行的选项有:
没有参数时,默认寻找build.xml文件
-buildfile(-f) filename 以filename文件作为Ant文件运行
-D propertyName=value 覆盖生成文件中的初始属性设置。
7、常用的任务标签
<javac srcdir="" classpath="" debug="" fork="" executable="filepath"/> debug、fork 可以取true/false。executable指定javac的目录。eg:d:\sdk141\bin\javac。executable一 般于fork配合使用
<jar destfile="package.jar" basedir="classes"/>
这将创建一个名为 package.jar 的 JAR 文件,并把 classes 目录中的所有文件添加到其中 (JAR 文件能够包含任意类型的文件,而不只是类文件)。此处没有指定清单文件,因此 Ant 将提供一个基本的清单文件。
manifest 属性允许指定一个用作该 JAR 文件的清单的文件。清单文件的内容还可以使用 manifest 任务在生成文件中指定。这个任务能够像文件系统写入一个清单文件,或者能够实 际嵌套在 jar 之内,以便一次性地创建清单文件和 JAR 文件。 例如:
<jar destfile="package.jar" basedir="classes">
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Main-class" value="package.Main"/>
</manifest>
</jar>
<mkdir dir="${buildDir}"/>
<tstamp/>
<delete dir="${buildDir}"/>
<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"/>
<zip destfile="output.zip" basedir="output"/>
<gzip src="output.tar" zipfile="output.tar.gz"/>
<unzip src="output.tar.gz" dest="extractDir"/>
还可以包括 overwrite 属性来控制覆盖行为。默认设置是覆盖与正在被提取的归档文件中的 条目相匹配的所有现有文件。相关的任务名称是 untar、unjar、gunzip 和 bunzip2。
<replace file="input.txt" token="old" value="new"/>
token 属性指定要查找的字符串,value 属性指定一个新的字符串,查找到的标记字符串的所 有实例都被替换为这个新的字符串
8、模式匹配
<copy todir="archive">
<fileset dir="src">
<include name="*.java"/>
</fileset>
</copy>
fileset 默认情况下包含指定 src 目录下的所有文件,因此为了仅选择 Java 文件,我们对模 式使用一个 include 元素。类似地,我们可以对另一个模式添加一个 exclude 元素,从而潜 在地排除include指定的匹配项。甚至可以指定多个include 和 exclude 元素;这样将得到一 组文件和目录,它们包含 include 模式的所有匹配项的并集,但排除了 exclude 模式的所有 匹配项。
9、Ant 可用的核心选择器的列表:
size:这个选择器用于根据文件的字节大小选择文件(除非使用 units 属性来指定了不同的单位)。when 属性用于设置比较的性质(less、more 或者 equal),value 属性定义每个文件将与之作比较的目标大小。
contains:只有包含给定文本字符串(由text 属性指定)的文件才匹配这个选择器。默认情况下,查找操作是大小写敏感的;添加casesensitive="no" 可以改变默认设置。
filename:name 属性指定文件名要与之匹配的模式。它本质上与 include 元素相同,以及与指定了negate="yes" 时的 exclude 元素相同。
present:从当前目录结构中选择如下文件:它们与指定的 targetdir 目录中的文件具有相同的名称和相对目录结构。
depend:这个选择器与 present 选择器具有相同的效果,只不过匹配的文件被限制到相对于 targetdir 位置中的对应文件来说,最近已修改过的那些文件。
date:这个选择器基于其最后修改日期选择文件。when 属性指定作比较的性质是 before、after 还是 equal,datetime 属性指定与之作比较的日期和时间,这个日期和时间具有给定的固定格式 MM/DD/YYYY HH:MM AM_or_PM。注意 Windows 平台上有一个内置的 2 秒偏移,以允许底层文件系统的不精确性 —— 这可能导致匹配的文件数量超过预期。允许的回旋时间量可以使用 granularity 属性来更改(以毫秒为单位来指定)。
depth:这个选择器检查每个文件的目录结构层次数目。min 和/或 max 属性用于选择具有想要的目录层次数目的的文件。
eg:
<fileset dir="dir">
<and>
<contains text="hello"/>
<size value="512" when="more"/>
</and>
</fileset>
10、将生成文件链接起来
可以使用 antfile 属性,仅指定那些要使用的生成文件,Ant 将生成该生成文件中的默认目标。例如:<ant antfile="sub-build.xml"/>
在父生成文件中定义的任何属性默认将传递给子生成文件,虽然这可以通过指定 inheritAll="false"来避免。通过使用 property 元素来传入显式的属性也是可以做到的 —— 即使将 inheritAll 设置为 false,这些属性也仍然适用于子生成文件。这个功能很适合用于给子生成文件传入参数。
让我们来考虑一个例子。下面是我们想要调用的一个生成文件:
<?xml version="1.0"?>
<project default="showMessage">
<target name="showMessage">
<echo message="Message=${message}"/>
</target>
</project>
(我们在前面还没有遇到过 echo 任务 —— 它简单地输出给定的消息。)
下面是调用第一个生成文件的第二生成文件,它还给第一个生成文件传入 message 属性:
<?xml version="1.0"?>
<project default="callSub">
<target name="callSub">
<ant antfile="sub.xml" target="showMessage" inheritAll="false">
<property name="message" value="Hello from parent build"/>
</ant>
</target>
</project>
11、使用 CVS 知识库
下面是从 CVS 知识库提取模块的一个例子生成文件:
<?xml version="1.0"?>
<project name="CVS Extract" default="extract" basedir=".">
<property name="cvsRoot" value=":pserver:anonymous@dev.eclipse.org:/home/eclipse"/>
<target name="extract">
<cvs cvsRoot="${cvsRoot}"
package="org.eclipse.swt.examples"
dest="${basedir}"/>
</target>
</project>
cvs 任务的主要属性是 cvsRoot,它是对 CVS 知识库的完整引用,包括连接方法和用户详细信息。这个参数的格式如下:
[:method:][[user][:password]@]hostname[:[port]]/path/to/repository
在上面的例子中,我们作为匿名用户连接到 Eclipse 项目的中央知识库。然后其他属性指定了我们希望提取的模块以及放置提取文件的目的地。提取是 CVS 任务的默认操作;其他操作可通过使用 command 属性来指定。
注意,为了利用 Ant 中的 cvs 任务,您需要在机器上安装 cvs 命令,并使其从命令行可用。
posted on 2005-07-28 11:04
coffee 阅读(3689)
评论(4) 编辑 收藏