target目标与任务

运行ant没有带参数的情况下,会读取project元素,并使用default属性来作为目标执行。

ant所有任务都支持的三个属性:
id,一个任务实例的唯一标识。与Reference类型一同使用。
taskname,任务实例名,将显示在日志中。
description,任务的注释。

<project>和<target>元素都不是任务。

project元素
属性
basedir基目录,工程中的所有相对路径都是基于该值。默认是构件文件所在目录。如果此属性未指定,则可以在调用 ant的时候加上特性 ant -Dbasedir=目录 target(要调用的目标名)

default必须,指定一个目标,如果ant命令未带上目标,则默认执行这个目标。

name项目的名字。用于建立文档。在ant -projecthelp时也会显示这个名字。

它可以嵌套子元素:
0-N个description为工程建立一个描述。在ant -projecthelp的时候会显示这个描述。
0-N个filelist元素 定义工程范围的filelist
0-N个fileset元素 定义工程范围的fileset
0-N个filterset元素 定义工程范围的filterset
0-N个mapper元素
0-N个path元素
0-N个property元素
1-N个target元素
0-N个taskdef元素


target元素
属性
depends此目标的依赖目标,用逗号分割。列出的目标会在此目标前执行。
description目标的描述。
if指定一个特性名,只有在设置了特性才会执行。
name必须,目标的名字
unless指定一个特性名,未设置特性,才执行。

目标可以包含DataType和任务。

ant任务
ant任务会基于另一个构件文件的一个目标调用ant。可以为工程定义多个构件文件。不同的ant版本,工程间调用时,特性的传递方式也不同。1.1版本,新工程可以见到调用工程的特性。如果两个工程都定义同一个特性,那么调用工程的特性优先。

属性:
antfile要调用的构件文件名字,默认是build.xml
dir新工程的基目录。antfile属性会相对这个目录来寻找。默认是当前目录。
inheritall控制特性如何由当前工程传递到新工程。默认是true。表示当前工程的特性在新工程可用。false,当前工程定义的特性不会传递到新工程,除非他们在ant命令行定义(这时候是用户特性,而不是构件特性了)。
output文件名,输出会写至这个文件。
target新工程要调用的文件名。如果忽略,会调用新工程的默认目标
可以嵌套
0-N个property元素,将一个特性传递到新工程
<ant antfile="email/build.xml">
<property name="test" value="test_value" />
</ant>

antcall任务
调用当前构件文件的一个目标
通过使用嵌套<param>元素将特性传递到新目标。antcall会使用当前构件文件,并新建一个实例,然后才调用这个目标。
属性:
inheritall和ant类似
target必须,要调用的目标

嵌套0-N个param元素
将一个特性传递给新的构件过程。param元素和property类似。属性也相同。

antstructure任务
为ant创建一个xml dtd。它使用java反射为所有任务确定可允许的属性和内容。因为ant任务并未指出所需要的属性,所以生成的DTD属性是#IMPLIED(表示可选)
属性
output必须,生成的DTD文件的文件名

apply任务
执行一个系统命令。execon任务已经被废除。与exec任务不同,此任务需要嵌套fileset来指定一个或多个文件和目录作为命令的参数
属性
dest由命令所生成的任何目标文件的目标目录。
dir命令的工作目录
executable必须,要执行的命令名,不包括命令参数
failonerror如果为true,若命令返回非0值,则构件失败。默认是false
newenvironment,如果是true,则不将现有环境变量传递至新过程。默认是false
os此任务可应用的操作系统列表,它会System.getProperty("os.name")来获取系统,并与之比较。在列表中了才会执行
output一个文件,命令输出既要重定向到这个文件
outputproperty存储命令输出的特性的名字
parallel如果为true,则命令仅执行一次,将所有文件传递为参数。如果为false,此命令为各个文件分别执行依次。默认是false。
skipemptyfilesets如果为true,当未找到源文件,或者源文件比目标文件新,则不执行命令。默认是false。
timeout终止命令之前所等待的豪秒数,如果未指定,无限期等待。
type确定无格式文件或目标的名字是否发送至命令。可允许的值可以是file,dir或both。默认是file
vmlauncher指定是否试图使用jvm的内置命令启动程序,而不是一个antRUN脚本,默认是true。
如果指定了一个嵌套的<mapper>元素,dest就必须。

可以嵌套子元素
0-N个arg元素,命令行参数
0-N个env元素,指定环境变量
0-N个fileset元素,指定哪些文件和目录要作为参数传递至命令。除非指定了srcfile元素,否则文件将追加到命令行末尾。
0-N个mapper元素,如果定义,则将目标文件的时间戳和源文件时间戳比较。
0-N个srcfile元素,如果存在,则对由fileset元素指定的文件要置于命令行何处加以控制。srcfile没有任何属性。需要置于合适的arg元素之间。
0-N个targetfile元素,此元素仅在apply元素设置了一个mapper元素和destdir属性才可用。没有任何属性。用于标记命令行上目标文件的位置。和srcfile元素相同。
<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<filelist id="needFiles" dir="." files="1.txt, 2.txt, 3.txt" />
<filelist id="moreFiles" dir="." files="4.txt" />
<target name="run">
<tstamp>
<format property="starttime" pattern="yyyy-MM-dd hh:mm:ss" />
</tstamp>
<echo message="开始时间:${starttime}" />

<apply executable="dir" vmlauncher="false">
<fileset dir=".">
<include name="build.xml" />
</fileset>
</apply>

<tstamp>
<format property="endtime" pattern="yyyy-MM-dd hh:mm:ss" />
</tstamp>
<echo message="结束时间:${endtime}" />
</target>
</project>
结果
D:\source\liyixing\ant>ant
Buildfile: D:\source\liyixing\ant\build.xml

run:
[echo] 开始时间:2011-05-16 11:27:00
[apply] 驱动器 D 中的卷是 IT
[apply] 卷的序列号是 D0EA-6307
[apply]
[apply] D:\source\liyixing\ant 的目录
[apply]
[apply] 2011-05-16 11:26 2,205 build.xml
[apply] 1 个文件 2,205 字节
[apply] 0 个目录 92,811,255,808 可用字节
[echo] 结束时间:2011-05-16 11:27:01

BUILD SUCCESSFUL
Total time: 0 seconds

加上output属性,output="a.txt"结果
D:\source\liyixing\ant>ant
Buildfile: D:\source\liyixing\ant\build.xml

run:
[echo] 开始时间:2011-05-16 11:30:36
[echo] 结束时间:2011-05-16 11:30:36

BUILD SUCCESSFUL
Total time: 0 seconds

dir命令的结果打印在了a.txt。打开a.txt可以看到结果。

available
available如果某资源可用,则有条件的设置一个特性。资源可以是一个类,文件,目录或者java系统资源。如果资源存在,此特性设置为true,或者设置为value属性设置的值。否则不设置特性。
部分任务不列出。

fail抛出一个异常(BuildException)并终止当前构建。message指定执行此任务时显示的消息。
属性
message要显示的消息。

jar
创建一个jar文件
属性
basedir 要增加到jar文件中的文件的基目录
compress 如果为true,则解压jar文件。默认是true
defaultexcludes 是否使用默认排除模式。默认是true
encoding 指定jar文件的文件名编码默认是utf-8.
excludes要排除的文件模式列表。逗号分隔
excludesfile 每行一个要排除的列表
includes 要包含的文件模式列表,逗号分隔
includesfile 每行包括一个要包含的文件模式。
jarfile 要创建的jar文件的文件名
manifest 清单文件的文件名。如果没有指定的话,ant会生成一个新的清单,里面会添加ant的版本号。
update如果为true,则发生修改时更新现有jar文件。而不是重新生成。
whenempty未找到输入文件的错做。默认是create。合法值是 fail 终止构建。 skip不创建jar文件 create创建一个空的jar文件。
可以嵌套
0-N个attribute元素。每个元素都是一个键值对。对于清单文件中未命名的段中。清单中各段使用空行分隔。使用section创建清单段。
属性:
name属性名
value属性值
0-N个patternset元素(exclude,incude,patternset,excludesfile,includesfile)代替其属性。

0-N个fileset元素,指定包括在jar文件中的文件和目录。
0-N个metainf元素,定义一个fileset,其中包含要放到jar的META-INF目录下面的文件。如果set中有MANIFEST.MF文件,那么会把这个文件和jar中的MANIFEST.MF合并。
0-N个section元素,每个元素定义一个清单段。每个section可以包含attribute。
属性:
name,段明。
0-N个zipfileset。

<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<filelist id="needFiles" dir="." files="1.txt, 2.txt, 3.txt" />
<filelist id="moreFiles" dir="." files="4.txt" />
<target name="run">
<tstamp>
<format property="starttime" pattern="yyyy-MM-dd hh:mm:ss" />
</tstamp>
<echo message="开始时间:${starttime}" />

<jar jarfile="build/test.jar" basedir="src" includes="**/*.java">
<manifest>
<attribute name="Version" value="3.2" />

<section name="test1">
<attribute name="test1-1" value="test1-1" />
</section>

<section name="test2">
<attribute name="os" value="windows" />
</section>
</manifest>
</jar>

<tstamp>
<format property="endtime" pattern="yyyy-MM-dd hh:mm:ss" />
</tstamp>
<echo message="结束时间:${endtime}" />
</target>
</project>
生成的jar的清单文件内容
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
Created-By: 1.6.0_22-b04 (Sun Microsystems Inc.)
Version: 3.2

Name: test1
test1-1: test1-1

Name: test2
os: windows


java
指定一个java类
使用ant的vm或者创建一个新的vm来执行java类。
如果代码中有System.exit(),要确保fork=true,否则ant也会退出。
属性
args,弃用,使用args元素
classname,执行的java类
classpath要使用的类路径。除非fork=true,否则会添加到ant的类路径。
classpathref 应用构建文件定义的类路径。
dir vm的工作目录。fork=true的时候,它才有效。
failonerror,如果未true,则当命令返回0值时构建失败。默认是false,fork=true的时候,它才有效。
fork 为true的时候,创建一个新的VM实例。默认false。
jar要执行的一个可执行jar文件的文件名。此jar文件必须包括一个Main-Class的清单项。而且fork必须是true。
jvm java解释器的命令名。默认是java。fork必须是true。
jvmargs,弃用使用jvmarg元素。
maxmemory 为新创建的vm分配最大内存量。fork=true才有用。
output 一个文件名,输出写到这里
classname或jar二者必选其中一个。
嵌套
0-N个arg或者jvmarg元素
指定应用的参数和虚拟机的参数。
0-N个sysproperty指定系统特性
0-N个classpath用path元素来代替classpath或者classpathref属性。
<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<filelist id="needFiles" dir="." files="1.txt, 2.txt, 3.txt" />
<filelist id="moreFiles" dir="." files="4.txt" />
<target name="run">
<tstamp>
<format property="starttime" pattern="yyyy-MM-dd hh:mm:ss" />
</tstamp>
<echo message="开始时间:${starttime}" />

<java classname="test.Test">
<arg value="123" />
<classpath>
<pathelement path="build" />
</classpath>
</java>

<tstamp>
<format property="endtime" pattern="yyyy-MM-dd hh:mm:ss" />
</tstamp>
<echo message="结束时间:${endtime}" />
</target>
</project>

<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<filelist id="needFiles" dir="." files="1.txt, 2.txt, 3.txt" />
<filelist id="moreFiles" dir="." files="4.txt" />

<path id="test.classpath">
<pathelement path="build/test.jar" />
<pathelement path="build/1.jar" />
</path>

<target name="run">
<tstamp>
<format property="starttime" pattern="yyyy-MM-dd hh:mm:ss" />
</tstamp>
<echo message="开始时间:${starttime}" />

<java classname="test.Test">
<arg value="123" />
<classpath refid="test.classpath" />
</java>

<tstamp>
<format property="endtime" pattern="yyyy-MM-dd hh:mm:ss" />
</tstamp>
<echo message="结束时间:${endtime}" />
</target>
</project>
应用其他地方定义的path

javac任务
编译,将java文件和class文件比较。如果不存在文件或者源文件比其相应的类文件更新,才会进行编译。依赖关系,ant无法发现。如父类A修改了,而子类B继承父类A,B未修改,ant只重新编译A,而不会重新编译B。会出现特殊问题。
支持多种编译器。
JDK1.1-12编译器是classic
JDK1.3/1.4是modern。
IBM Jikes编译器 jikes
Microsoft的javaSDK编译器 jvc
kopi编译器kjc
gcc的gcj编译器 gcj
Symantec编译器 sj
在其自己的JVM中运行modern或classic extJavac
属性
bootclasspath 要启动的bootstrap类路径。
bootclasspathref应用某处定义的类路径。
classpath要使用的类路径。如果fork不是true的情况下,会把它添加到ant的类路径。
classpathref 应用某处的类路径。
debug 如果是true,编译源代码会有调试信息。默认false
defaultexcludes 是否使用默认排除模式。默认true
depend 如果是true,则对于支持依赖检查的编译器(jikes和classic)启动依赖检查。默认是false。
deprecation,如果是true,显示废弃警告。默认false
destdir类文件的目标目录
encoding源文件的字符编码
excludes
excludesfile
extdirs覆盖java安装可选包的一般位置
failonerror如果true,当出现错误,构建失败。默认是true
fork 如果true,java编译器作为一个新的进程。如果设置,此属性将覆盖build.compiler特性。而ant执行JAVA_HOME/bin中实际的java可执行程序。而不是编译器的Main类。默认false
includeantruntime,如果true,则将ant运行时库包含到类路径。默认true
includejavaruntime,如果是true,则包括来自正在执行的VM的默认运行库。默认是false。
includes
includesfile
memoryinitialsize 当fork=true时工作。为vm指定内存大小。
memorymaximumsize 当fork=true时工作。为vm指定最大内存
nowarn如果是true,把-nowarn参数传递到编译器。默认false
optimize如果true,指示编译器优化代码。默认false。
source如果指定,此属性的文件将作为-source命令行参数传递给javac。
srcdir源代码的位置
target指定一个vm的版本
verbose如果未true,则编译器生成显示输出。默认是false。
除非指定了src元素,否则srcdir的属性是必须的。

可以嵌套0-N个exclude,include,patternset,excludesfile,includesfile
0-N个bootclasspath,classpath,extdirs,src
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值