显示描述ant命令及其选项的帮助信息;
显示包含在构建文件中的、所有用户编写的帮助文档。即为各个
要求ant 显示其版本信息,然后退出。
抑制并非由构建文件中的echo 任务所产生的大多数消息。
显示构建过程中每个操作的详细消息。此选项与-debug 选项只能选其一。
显示Ant 和任务开发人员已经标志为调试消息的消息。此选项与-verbose 只能选其一。
对日志消息进行格式化,使它们能够很容易地由Emacs的shell 模式(shellmode)所解析;也就是说,打印任务事件,但并不缩排,在其之前也没有[taskname]。
将日志输出重定向到指定文件。
指定一个类来处理Ant的日志记录。所指定的类必须实现了org.apache.tools.ant.BuildLogger接口。
为Ant 声明一个监听类,并增加到其监听者列表中。在Ant与IDE或其他Java程序集成时,此选项非常有用。可以阅读第六章以了解有关监听者的更多信息。必须将所指定的监听类编写为可以处理Ant 的构建消息接发。
指定Ant 需要处理的构建文件。默认的构建文件为build.xml。
在命令行上定义一个特性名-值对。
指定Ant 应当处理的构建文件。与-buildfile 选项不同,如果所指定文件在当前目录中未找到,-find 就要求Ant 在其父目录中再进行搜索。这种搜索会继续在其祖先目录中进行,直至达到文件系统的根为止,在此如果文件还未找到,则构建失败。
jdk1.5以上的可以使用代理设置
运行ant时不使用用户lib中的jar包。
设计主线程优先级
使用指定的log日志
不允许交互输入
执行不依赖于所有目标
加载所有属性配置文件 -d 属性文件优先
< project default="all">
注意: ● 所有构建文件都要有
在cmd窗口中进入到当前build.xml目录
复制代码 代码如下:
ant
在当前目录下的build.xml运行Ant,执行缺省的target。
复制代码 代码如下:
ant -buildfile build-test.xml
在当前目录下的build-test.xml运行Ant,执行缺省的target。
复制代码 代码如下:
ant -buildfile build-test.xml clean
在当前目录下的build-test.xml运行Ant,执行一个叫做clean的target。
复制代码 代码如下:
ant -buildfile build-test.xml -Dbuild=build/classes clean
在当前目录下的build-test.xml运行Ant,执行一个叫做clean的target,并设定build属性的值为build/classes。
在构建文件中为了标识文件或文件组,经常需要使用数据类型。数据类型包含在org.apache.tool.ant.types包中。下面镜简单介绍构建文件中一些常用的数据类型。
path元素用来表示一个类路径,不过它还可以用于表示其他的路径。在用作几个属性时,路经中的各项用分号或冒号隔开。在构建的时候,此分隔符将代替当前平台中所有的路径分隔符
●location 表示一个文件或目录。Ant在内部将此扩展为一个绝对路径。
●refid 是对当前构建文件中某处定义的一个path的引用。
●path表示一个文件或路径名列表。
fileset 数据类型定义了一组文件,并通常表示为
●dir表示fileset 的基目录。
●casesensitive的值如果为false,那么匹配文件fileset是不区分大小写的,其默认值为true.
●defaultexcludes 用来确定是否使用默认的排除模式,默认为true。
●excludes 是用逗号分隔的需要排除的文件模式列表。
●excludesfile 表示每行包含一个排除模式的文件的文件名。
●includes 是用逗号分隔的,需要包含的文件模式列表。
●includesfile 表示每行包括一个包含模式的文件名。
fileList显示的命名文件列表。fileSet作为过滤器,可以返回文件系统中存在并且匹配指定模式的文件,fileList用于指定可能存在也可能不存在的文件。相对于指定的目录,多个文件被指定为一个文件列表,但是不支持通配符。fileList可以出现在支持此功能的task中,或者作为单独的类型。
●dir是用于计算绝对文件名的目录。
●files 是用逗号分隔的文件名列表。
●refid 是对某处定义的一个
注意:dir 和 files 都是必要的,除非指定了refid(这种情况下,dir和files都不允许使用)。从Ant1.6.2起,支持嵌套file元素,file元素包含一个name属性,用于指定文件名,文件名是逗号或者空格分隔的文件列表。
ClassFileSet是一种特殊的文件集类型,包含所给定一组“root”类所依赖的所有类文件。通常用于为特定的应用程序创建一个包含所有必需类的jar。classfilesets通常是做为引用来使用,为其声明一个id属性,就可以将其作为一个普通的文件集使用。此类型需要bcel支持。
●dir:文件集目录树的根目录。
●file:指定文件集包含的文件。
●defaultexcludes:是否使用默认排除列表,默认为true。
●includes:逗号或空格分隔的必须包含的文件模式列表。
●includesfile:文件名。指定文件的每一行都会做为一个includes模式。
●excludes:逗号或空格分隔的必须排除的文件模式列表。
●excludesfile:文件名。指定文件的每一行都会做为一个excludes模式。
●casesensitive:处理includes与excludes模式时是否区分大小写,默认为true。
●followsymlinks:是否跟踪符号链接,默认为true。
●erroronmissingdir:Ant1.7.1起,指定在基本目录不存在时的处理方式。如果为true,会发生构建错误,如果为false,文件集会被忽略。默认为true。
●rootclass:一个根类的名字。
注意:当需要多个根类时,可以使用多个内嵌的root元素,还可以使用rootfileset元素。rootfileset可以从文件集中添加一组根类。在这种情况下文件集中的文件预期为java类文件,Java类的名称是由文件集中的类文件的相对位置决定的。例如,文件com/run/ayena/trans/core/Trans对应java类com.run.ayena.trans.core.Trans。
有一些task在获取源文件、创建目标文件时,根据task的不同,目标文件的名称是很明显的。比如javac,可以明确的知道目标文件是.class文件。源文件通常被指定为fileset,并且没有指定目标文件,但是会告诉Ant如何找到源文件的目标文件。org.apache.tools.ant.util.FileNameMapper实例就是用来做这件事的,它基于from和to属性的参数化规则构建目标文件名字,具体的规则依赖于具体的实现。可以支持除了from和to以外的其他属性。Ant中包含一些内置的实现。简单来说,Mapper类型定义了一组输入文件和一组输出文件间的关系。简单来说,ant里面mapper标签是和fileset配合使用的,目的就是把fileset取出的文件名转成指定的样式。
●type:属性的取值为identity,flatten glob merge regexp 其中之一,它定义了要是用的内置mapper的类型。
●classname:通过类名指定具体的实现,表示实现mapper类的类名。当内置mapper不满足要求时,用于创建定制mapper。
●classpath:表示查找一个定制mapper时所用的类型路径。
●classpathref:查找classname时使用的类路径的引用,是对某处定义的一个类路径的引用。
●from:实现的form属性,属性的含义取决于所用的mapper。
●to:实现的to属性,属性的含义取决于所用的mapper。
注意:ant不会将to和from属性中的“/”或“\”自动转换为当前平台正确的目录分隔符。如果需要使用分隔符,可以用${file.separator}代替。对于regexpmapper,${file.separator}不起作用,在Windows上的“\”是正则表达式的转义字符。因此对于regexpmapper可以使用handledirsep属性。
复制之前的文件目录结构为:
(1)identity,保持原样
(2)flatten只返回文件名去掉目录
这个的作用很简单...就是取消目录...比如你在test文件夹下面有一个test1.java文件.映射以后就会自动帮你去掉test这个目录..下面的例子就是将所有wuguangwei目录下的java文件拿出来复制到copyfile文件下..
注意,这里因为取消目录,放到同一个文件夹下,所以如果你要复制的java文件如果有重名,那么就会造成覆盖...所以这里要求不要有重名.
(3)glob加前缀和后缀
注意:这里是将符合条件的java文件复制过去.也仅复制这些.. 。这句话的意思是,如果你在fileset里面指定还复制txt结尾的文件,但是因为mapper的指定,仍然不会复制txt类型的文件,比如这样
这里的fileset里虽然制定还要复制txt文件,但是在mapper里面指定复制的是java类型文件,所以txt文件将不会被复制。
(4)chainedmapper
是把多个不同的mapper标签联合起来执行,以达到更全的处理方案。
注意:若是这个里面不写chainedmapper的话,返回的结果包含mapper里面所有的mapper返回结果的和。因为这个里面把flatten和glob两个标签联合起来用了。
(4)正则表达式
正则表达式仅仅会抓取出相匹配的字符串,而没有替换功能。
(5)package包映射
其实包映射是全局映射的一个子集..他就是将你的目录使用"."来隔开。
如你的java文件是 abc\aaa.java.使用包映射以后,将变成abc.aaa.java。当然这里还可以与全局映射一样修改成其他的,上面的例子就是在名字后面添加了"11"。
(6)unpackage 解包映射
这个和(5)中的package刚好相反..是将 ab.cc.abc.java 变成 ab\cc\abc11.java.这个也是glob映射的一个子集。
(7)cutdirsmapper
filterSet是一组过滤器, 这些过滤器将在文件移动或复制时完成文件的文本替换。过滤器可以通过token-value对或者从文件中读取来进行定义。
filterSet可以嵌套在支持过滤的task中,也可以与task一样作为project的子元素。
filterSet支持id和refid属性,可以给filterSet定义一个id属性,然后在另一个filterSet中通过refid属性来引用。使用refid属性的filterSet就不可以定义除了id外的其他属性了。
filterSet中可以嵌套filterSet来获取一组包含的过滤器的并集。
filterSet可以通过定义begintoken、endtoken来定义要匹配的内容。如果定义了相同的token,会使用最后一次的定义。
filterSet可以在诸如copy等task中进行字符的替换。
在操作中使用filterSet时,文件以文本方式进行处理,一行一行的进行过滤。在使用过滤器时要确保要进行过滤的文件都是文本文件。
●begintoken:标记token开头的字符串,默认为@。
●endtoken:标记token结尾的字符串,默认为@。
●filtersfile:指定一个过滤器文件。
●recurse:ant1.6.3起,表示替换token的文本是否可以被其他的token进行查找,默认为true。
●onmissingfiltersfile:ant1.7起,表示当filtersfile指定的文件不存在时如何处理,可选值为fail、warn、ignore,默认为fail。
●filterSet还支持两种嵌套元素:
filter,具有以下两个属性:token:要替换的token。value:要替换成的值。
filtersfile,有一个属性:file:加载token的属性文件。
5.1.6.3 应用示例
由Ant构建文件调用的程序,可以通过
●values 是一个命令参数。如果参数中有空格,但又想将它作为单独一个值,则使用此属性。
●file 表示一个参数的文件名。在构建文件中,此文件名相对于当前的工作目录。
●line 表示用空格分隔的多个参数列表。
●path表示路径,一个作为单个命令行变量的path-like的字符串;或作为分隔符,Ant会将其转变为特定平台的分隔符。
●pathref 引用的path(使用path元素节点定义path)的id
●prefix 前缀
●suffix 后缀
< arg value="-l -a"/>:是一个含有空格的单个的命令行变量。
< arg line="-l -a"/>:是两个空格分隔的命令行变量。
< arg path="/dir;/dir2;\dir3"/>:是一个命令行变量,其值在DOS系统上为\dir;\dir2;\dir3;在Unix系统上为/dir:/dir2:/dir3 。
由Ant构建文件调用的外部命令或程序,
●file表示环境变量值的文件名。此文件名要被转换位一个绝对路径。
●path表示环境变量的路径。Ant会将它转换为一个本地约定。
●value 表示环境变量的一个直接变量。
●key 表示环境变量名。 注意 file path 或 value只能取一个。
模式可以分组到一个集合,然后通过id属性进行引用。它们是通过patternset元素定义的,patternset可以被嵌套到文件集或基于目录的构成隐式文件集的任务中。patternset可以与target同级进行单独的定义,可以作为project的子元素,也可以作为target的子元素。可以通过嵌套include、includesfile、exclude或excludesfile元素来指定模式。嵌套的元素可以使用if/unless属性。patternset可以嵌套另一个patternset,可以将模式添加到父patternset。fileset是对文件的分组,而patternset是对模式的分组,他们是紧密相关的概念。
●includes:逗号或空格分隔的必须要包含的文件模式列表。
●includesfile:文件名。指定文件的每一行都会作为一个includes模式。
●excludes:逗号或空格分隔的必须排除的文件模式列表。
●excludesfile:文件名。指定文件的每一行都会作为一个excludes模式。
当嵌套的元素使用if/unless元素时,当if指定的属性已设置或者unless指定的属性未设置时,嵌套的元素才会生效。patternset 还允许以下嵌套元素:include,exclude,includefile 和 excludesfile.
project 元素是 Ant 构件文件的根元素, Ant 构件文件至少应该包含一个 project 元素,否则会发生错误。在每个 project 元素下,可包含多个 target 元素。接下来向读者展示一下 project 元素的各属性。
●name 属性:用于指定 project 元素的名称。
●default 属性:用于指定 project 默认执行时所执行的 target 的名称。
●basedir 属性:用于指定基路径的位置。该属性没有指定时,使用 Ant 的构件文件的目录作为基准目录。
从上例可以看出,在这里定义了default属性的值为jar,即当运行ant命令时,如果没有指明执行的target,则将执行默认的target(jar)。此外,还定义了basedir属性的值为“.”,“.”表示当前目录。
target为ant的基本执行单元或是任务,它可以包含一个或多个具体的单元/任务。多个target 可以存在相互依赖关系。
● name 属性:指定 target 元素的名称,这个属性在一个 project 元素中是唯一的。我们可以通过指定 target 元素的名称来指定某个 target 。
● depends 属性:用于描述 target 之间的依赖关系,若与多个 target 存在依赖关系时,需要以“,”间隔。 Ant 会依照 depends 属性中 target 出现的顺序依次执行每个 target ,被依赖的target 会先执行。
● if 属性:用于验证指定的属性是存在,若不存在,所在 target 将不会被执行。
● unless 属性:该属性的功能与 if 属性的功能正好相反,它也用于验证指定的属性是否存在,若不存在,所在 target 将会被执行。
● description 属性:该属性是关于 target 功能的简短描述和说明。
从运行结果后可以看到,我们运行的是名为 print的target ,由于它依赖于version这个target任务,所以version将首先被执行,同时因为系统配置了JDK,所以“ant.java.version”属性存在,执行了version,输出信息:“ [echo] Java Version: 1.8”,version执行完毕后,接着执行 print,因为docs不存在,而unless属性是在不存在时进入所在target的,由此可知 print得以执行,输出信息“[echo] The base dir is:D:\antprojet\test”。
Ant对Java程序的系统属性做了支持,可以直接的访问系统属性:
Ant 还提供了一些它自己的内置属性,
如basedir:project 基目录的绝对路径;
ant.file:buildfile的绝对路径;
ant.version:Ant 的版本信息;
ant.project.name:当前指定的project的名字,即前文说到的project的name属性值;
ant.java.version:Ant 检测到的JDK版本,本文为 1.8。
●name:属性名,指定property节点的名称。
●value:属性值,指定property的值。
●location:属性值,指定property的值。当值为路径时建议用location相对安全。
●refid:
●resource:
●file:
●url:
●environment:
●classpath:
●classpathref:
●prefix:
●prefix Values:
●relative:
●basedir:
在build.xml中可以使用
(1)指定name,以及value或者location的方式
如果是value,则是直接设置为字面量。如果是location,则表示该值是一个文件系统上的一个路径,可以设置为绝对路径,也可以设置为相对路径。
value和location的功能是接近的,都是property的值,但有些小的区别,如果你的property存储的是路径,那么明河推荐使用location属性,location属性会对路径进行转换,永远返回绝对路径形式。
(2)指定name并以及嵌入文本的方式
(3)指定name,refid
之前已提到过,每个task都有一个id,property是一种特殊的task,所以也可以为它设置id属性。
(4)指定file属性来设置多个Property
属性文件可以放在本地文件系统中,可以是网络上某个主机里,也可以是在当前classpath下。针对这几种情况,ant都做了支持。分别通过指定file,url,resource来加载属性文件。
另外,在使用这三种方式(file,url,resource)时,可以指定前缀prefix的。默认情况下是没有前缀的,也就是,定义的变量仍然属性文件中的变量名。如果指定了前缀,就是定义了这样的变量(前缀.属性名)。
●file属性是指定本地文件的路径,可以是绝对路径,也可以是相对路径。
●url 指定URL,通过网络资源来配置
●resource 指定resource ,加载classpath下属性文件
如果属性文件放在指定的classpath下,可以通过使用resource来指定属性文件位置。
默认是当前路径下。也就是说在使用resource时,如果指定了classpath属性,则从指定的classpath下加载,如果没有指定,则从当前classpath下加载。
根据上面的说明,可以知道resource是和classpath(或者classpathref)结合使用的。
所以使用resource时,可以是下面三种形式:
(5)将环境变量作为property使用
使用方法是:
这样就是将环境变量作为属性加载的。加载的变量名是:env.XXX。例如环境变量中的PATH、JAVA_HOME,加载后的变量名是:env.JAVA_HOME,env.PATH。
(6)ant执行参数传递