代码构建(二)——ANT常用命令及初步认识ANT脚本

4.ant命令

代码构建(二)——ANT常用命令及初步认识ANT脚本_第1张图片

4.1 ant -help

显示描述ant命令及其选项的帮助信息;

4.2 ant -projecthelp

显示包含在构建文件中的、所有用户编写的帮助文档。即为各个中description 属性的文本,以及包含在元素中的任何文本。将有description 属性的目标列为主目标(Main target),没有此属性的目标则列为子目标(Subtarget)。

4.3 ant -version

要求ant 显示其版本信息,然后退出。

4.4 ant -quiet

抑制并非由构建文件中的echo 任务所产生的大多数消息。

4.5 ant -verbose

显示构建过程中每个操作的详细消息。此选项与-debug 选项只能选其一。

4.6 ant -debug

显示Ant 和任务开发人员已经标志为调试消息的消息。此选项与-verbose 只能选其一。

4.7 ant -emacs

对日志消息进行格式化,使它们能够很容易地由Emacs的shell 模式(shellmode)所解析;也就是说,打印任务事件,但并不缩排,在其之前也没有[taskname]。

4.8 ant -logfile filename

将日志输出重定向到指定文件。

4.9 ant -logger classname

指定一个类来处理Ant的日志记录。所指定的类必须实现了org.apache.tools.ant.BuildLogger接口。

4.10 ant -listener classname

 为Ant 声明一个监听类,并增加到其监听者列表中。在Ant与IDE或其他Java程序集成时,此选项非常有用。可以阅读第六章以了解有关监听者的更多信息。必须将所指定的监听类编写为可以处理Ant 的构建消息接发。

4.11 ant -buildfile filename

指定Ant 需要处理的构建文件。默认的构建文件为build.xml。

4.12 ant -D property=value

在命令行上定义一个特性名-值对。

4.13 ant -find filename

指定Ant 应当处理的构建文件。与-buildfile 选项不同,如果所指定文件在当前目录中未找到,-find 就要求Ant 在其父目录中再进行搜索。这种搜索会继续在其祖先目录中进行,直至达到文件系统的根为止,在此如果文件还未找到,则构建失败。

4.14 ant -atuoproxy

jdk1.5以上的可以使用代理设置

4.15 ant -nouserlib

运行ant时不使用用户lib中的jar包。

4.16 ant -nice

设计主线程优先级

4.17 ant -logfile

使用指定的log日志

4.18 ant -noinput

不允许交互输入

4.19 -keep-going, -k

执行不依赖于所有目标

4.20 ant -propertyfile

加载所有属性配置文件 -d 属性文件优先

< project default="all">                                                                     < /project>

注意: ● 所有构建文件都要有元素,而且至少有一个 元素。 ● 对于 元素的default 属性并不一定需要默认值。 ● 构建文件并不一定要被命名为build.xml。不过build.xml 是ant 要搜索的默认文件名。 ● 每个构建文件只能有一个 元素。

在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。

5.ant脚本

5.1 Ant数据类型

       在构建文件中为了标识文件或文件组,经常需要使用数据类型。数据类型包含在org.apache.tool.ant.types包中。下面镜简单介绍构建文件中一些常用的数据类型。

5.1.1 path类型
5.1.1.1概述

    path元素用来表示一个类路径,不过它还可以用于表示其他的路径。在用作几个属性时,路经中的各项用分号或冒号隔开。在构建的时候,此分隔符将代替当前平台中所有的路径分隔符

5.1.1.2 常见属性

       ●location 表示一个文件或目录。Ant在内部将此扩展为一个绝对路径。

       ●refid 是对当前构建文件中某处定义的一个path的引用。

       ●path表示一个文件或路径名列表。

5.1.1.3 应用示例

代码构建(二)——ANT常用命令及初步认识ANT脚本_第2张图片

5.1.2 fileset 文件类型
5.1.2.1 概述

    fileset 数据类型定义了一组文件,并通常表示为元素。不过,许多ant任务构建成了隐式的fileset,这说明他们支持所有的fileset属性和嵌套元素。应用场景:如设置

5.1.2.2 常见属性

    ●dir表示fileset 的基目录。

       ●casesensitive的值如果为false,那么匹配文件fileset是不区分大小写的,其默认值为true.

       ●defaultexcludes 用来确定是否使用默认的排除模式,默认为true。

       ●excludes 是用逗号分隔的需要排除的文件模式列表。

       ●excludesfile 表示每行包含一个排除模式的文件的文件名。

       ●includes 是用逗号分隔的,需要包含的文件模式列表。

       ●includesfile 表示每行包括一个包含模式的文件名。

5.1.2.3 应用示例

代码构建(二)——ANT常用命令及初步认识ANT脚本_第3张图片

5.1.3 filelist类型
5.1.3.1 概述

    fileList显示的命名文件列表。fileSet作为过滤器,可以返回文件系统中存在并且匹配指定模式的文件,fileList用于指定可能存在也可能不存在的文件。相对于指定的目录,多个文件被指定为一个文件列表,但是不支持通配符。fileList可以出现在支持此功能的task中,或者作为单独的类型。

5.1.3.2 常见属性

       ●dir是用于计算绝对文件名的目录。

       ●files 是用逗号分隔的文件名列表。

       ●refid 是对某处定义的一个的引用。

    注意:dir 和 files 都是必要的,除非指定了refid(这种情况下,dir和files都不允许使用)。从Ant1.6.2起,支持嵌套file元素,file元素包含一个name属性,用于指定文件名,文件名是逗号或者空格分隔的文件列表。

5.1.3.3 应用示例

代码构建(二)——ANT常用命令及初步认识ANT脚本_第4张图片

5.1.4 ClassFileSet类型
5.1.4.1概述

    ClassFileSet是一种特殊的文件集类型,包含所给定一组“root”类所依赖的所有类文件。通常用于为特定的应用程序创建一个包含所有必需类的jar。classfilesets通常是做为引用来使用,为其声明一个id属性,就可以将其作为一个普通的文件集使用。此类型需要bcel支持。

5.1.4.2常见属性

    ●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。

5.1.4.3 应用示例

代码构建(二)——ANT常用命令及初步认识ANT脚本_第5张图片

5.1.5 mapper类型
5.1.5.1概述

    有一些task在获取源文件、创建目标文件时,根据task的不同,目标文件的名称是很明显的。比如javac,可以明确的知道目标文件是.class文件。源文件通常被指定为fileset,并且没有指定目标文件,但是会告诉Ant如何找到源文件的目标文件。org.apache.tools.ant.util.FileNameMapper实例就是用来做这件事的,它基于from和to属性的参数化规则构建目标文件名字,具体的规则依赖于具体的实现。可以支持除了from和to以外的其他属性。Ant中包含一些内置的实现。简单来说,Mapper类型定义了一组输入文件和一组输出文件间的关系。简单来说,ant里面mapper标签是和fileset配合使用的,目的就是把fileset取出的文件名转成指定的样式。

5.1.5.2 常见属性

●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属性。

5.1.5.3应用示例

复制之前的文件目录结构为:

代码构建(二)——ANT常用命令及初步认识ANT脚本_第6张图片

  

代码构建(二)——ANT常用命令及初步认识ANT脚本_第7张图片

(1)identity,保持原样

代码构建(二)——ANT常用命令及初步认识ANT脚本_第8张图片

代码构建(二)——ANT常用命令及初步认识ANT脚本_第9张图片

(2)flatten只返回文件名去掉目录

    这个的作用很简单...就是取消目录...比如你在test文件夹下面有一个test1.java文件.映射以后就会自动帮你去掉test这个目录..下面的例子就是将所有wuguangwei目录下的java文件拿出来复制到copyfile文件下..

    注意,这里因为取消目录,放到同一个文件夹下,所以如果你要复制的java文件如果有重名,那么就会造成覆盖...所以这里要求不要有重名.

代码构建(二)——ANT常用命令及初步认识ANT脚本_第10张图片

代码构建(二)——ANT常用命令及初步认识ANT脚本_第11张图片

(3)glob加前缀和后缀

代码构建(二)——ANT常用命令及初步认识ANT脚本_第12张图片

       注意:这里是将符合条件的java文件复制过去.也仅复制这些.. 。这句话的意思是,如果你在fileset里面指定还复制txt结尾的文件,但是因为mapper的指定,仍然不会复制txt类型的文件,比如这样

代码构建(二)——ANT常用命令及初步认识ANT脚本_第13张图片

       这里的fileset里虽然制定还要复制txt文件,但是在mapper里面指定复制的是java类型文件,所以txt文件将不会被复制。

(4)chainedmapper

       是把多个不同的mapper标签联合起来执行,以达到更全的处理方案。

代码构建(二)——ANT常用命令及初步认识ANT脚本_第14张图片

代码构建(二)——ANT常用命令及初步认识ANT脚本_第15张图片

注意:若是这个里面不写chainedmapper的话,返回的结果包含mapper里面所有的mapper返回结果的和。因为这个里面把flatten和glob两个标签联合起来用了。

(4)正则表达式

       正则表达式仅仅会抓取出相匹配的字符串,而没有替换功能。

代码构建(二)——ANT常用命令及初步认识ANT脚本_第16张图片

代码构建(二)——ANT常用命令及初步认识ANT脚本_第17张图片

(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

这个的作用就是把文件目录去掉一部分。dirs=“3”,就是去掉前三层目录。

代码构建(二)——ANT常用命令及初步认识ANT脚本_第18张图片

5.1.6 filterset 类型
5.1.6.1概述

       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时,文件以文本方式进行处理,一行一行的进行过滤。在使用过滤器时要确保要进行过滤的文件都是文本文件。

5.1.6.1常见属性

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常用命令及初步认识ANT脚本_第19张图片

5.1.7 arg 数据参数元素
5.1.7.1 概述

    由Ant构建文件调用的程序,可以通过元素向其传递命令行参数,如apply,exec和java任务均可接受嵌套元素,可以为各自的过程调用指定参数。以下是的所有属性。

5.1.7.2 常用属性

       ●values 是一个命令参数。如果参数中有空格,但又想将它作为单独一个值,则使用此属性。

    ●file 表示一个参数的文件名。在构建文件中,此文件名相对于当前的工作目录。

    ●line 表示用空格分隔的多个参数列表。

    ●path表示路径,一个作为单个命令行变量的path-like的字符串;或作为分隔符,Ant会将其转变为特定平台的分隔符。

    ●pathref 引用的path(使用path元素节点定义path)的id

    ●prefix 前缀

    ●suffix 后缀

5.1.7.3 应用示例

代码构建(二)——ANT常用命令及初步认识ANT脚本_第20张图片

< arg value="-l -a"/>:是一个含有空格的单个的命令行变量。

< arg line="-l -a"/>:是两个空格分隔的命令行变量。

< arg path="/dir;/dir2;\dir3"/>:是一个命令行变量,其值在DOS系统上为\dir;\dir2;\dir3;在Unix系统上为/dir:/dir2:/dir3 。

5.1.8 ervironment 类型
5.1.8.1 概述

    由Ant构建文件调用的外部命令或程序,元素制定了哪些环境变量要传递给正在执行的系统命令。

5.1.8.2 常见属性

       ●file表示环境变量值的文件名。此文件名要被转换位一个绝对路径。

    ●path表示环境变量的路径。Ant会将它转换为一个本地约定。

    ●value 表示环境变量的一个直接变量。

    ●key 表示环境变量名。 注意 file path 或 value只能取一个。

5.1.9 patternset 类型
5.1.9.1 概述

    模式可以分组到一个集合,然后通过id属性进行引用。它们是通过patternset元素定义的,patternset可以被嵌套到文件集或基于目录的构成隐式文件集的任务中。patternset可以与target同级进行单独的定义,可以作为project的子元素,也可以作为target的子元素。可以通过嵌套include、includesfile、exclude或excludesfile元素来指定模式。嵌套的元素可以使用if/unless属性。patternset可以嵌套另一个patternset,可以将模式添加到父patternset。fileset是对文件的分组,而patternset是对模式的分组,他们是紧密相关的概念。

5.1.9.2 常见属性

    支持4个属性:includes、excludex、includexfile、excludesfile,这些与fileset相同。

    ●includes:逗号或空格分隔的必须要包含的文件模式列表。

    ●includesfile:文件名。指定文件的每一行都会作为一个includes模式。

    ●excludes:逗号或空格分隔的必须排除的文件模式列表。

    ●excludesfile:文件名。指定文件的每一行都会作为一个excludes模式。

    当嵌套的元素使用if/unless元素时,当if指定的属性已设置或者unless指定的属性未设置时,嵌套的元素才会生效。patternset 还允许以下嵌套元素:include,exclude,includefile 和 excludesfile.

5.1.9.3应用示例

5.2 节点元素

5.2.1 project 节点元素

project 元素是 Ant 构件文件的根元素, Ant 构件文件至少应该包含一个 project 元素,否则会发生错误。在每个 project 元素下,可包含多个 target 元素。接下来向读者展示一下 project 元素的各属性。

5.2.1.1 常见属性

●name 属性:用于指定 project 元素的名称。

●default 属性:用于指定 project 默认执行时所执行的 target 的名称。

●basedir 属性:用于指定基路径的位置。该属性没有指定时,使用 Ant 的构件文件的目录作为基准目录。

5.2.1.2应用实例

代码构建(二)——ANT常用命令及初步认识ANT脚本_第21张图片

从上例可以看出,在这里定义了default属性的值为jar,即当运行ant命令时,如果没有指明执行的target,则将执行默认的target(jar)。此外,还定义了basedir属性的值为“.”,“.”表示当前目录。

5.2.2 target节点元素
5.2.2.1 概述

target为ant的基本执行单元或是任务,它可以包含一个或多个具体的单元/任务。多个target 可以存在相互依赖关系。

5.2.2.2常用属性:

● name 属性:指定 target 元素的名称,这个属性在一个 project 元素中是唯一的。我们可以通过指定 target 元素的名称来指定某个 target 。

● depends 属性:用于描述 target 之间的依赖关系,若与多个 target 存在依赖关系时,需要以“,”隔。 Ant 会依照 depends 属性中 target 出现的顺序依次执行每个 target ,被依赖的target 会先执行。

● if 属性:用于验证指定的属性是存在,若不存在,所在 target 将不会被执行。

● unless 属性:该属性的功能与 if 属性的功能正好相反,它也用于验证指定的属性是否存在,若不存在,所在 target 将会被执行。

● description 属性:该属性是关于 target 功能的简短描述和说明。

5.2.2.3应用示例

代码构建(二)——ANT常用命令及初步认识ANT脚本_第22张图片

代码构建(二)——ANT常用命令及初步认识ANT脚本_第23张图片

从运行结果后可以看到,我们运行的是名为 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”。

5.2.3 property属性节点元素
5.2.3.1系统属性

Ant对Java程序的系统属性做了支持,可以直接的访问系统属性:

5.2.3.2 ANT内置属性

Ant 还提供了一些它自己的内置属性,

如basedir:project 基目录的绝对路径;

ant.file:buildfile的绝对路径;

ant.version:Ant 的版本信息;

ant.project.name:当前指定的project的名字,即前文说到的project的name属性值;

ant.java.version:Ant 检测到的JDK版本,本文为 1.8。

代码构建(二)——ANT常用命令及初步认识ANT脚本_第24张图片

5.2.3.3 property节点属性

       ●name:属性名,指定property节点的名称。

       ●value:属性值,指定property的值。

       ●location:属性值,指定property的值。当值为路径时建议用location相对安全。

       ●refid:

       ●resource:

       ●file:

       ●url:

       ●environment:

       ●classpath:

       ●classpathref:

       ●prefix:

       ●prefix Values:

       ●relative:

       ●basedir:

5.2.3.4自定义属性

在build.xml中可以使用来自定义属性。属性一经设置,将不可改变。共有7种方式可以设置属性。

1)指定name,以及value或者location的方式

或者

如果是value,则是直接设置为字面量。如果是location,则表示该值是一个文件系统上的一个路径,可以设置为绝对路径,也可以设置为相对路径。

value和location的功能是接近的,都是property的值,但有些小的区别,如果你的property存储的是路径,那么明河推荐使用location属性,location属性会对路径进行转换,永远返回绝对路径形式。

代码构建(二)——ANT常用命令及初步认识ANT脚本_第25张图片

代码构建(二)——ANT常用命令及初步认识ANT脚本_第26张图片

2)指定name并以及嵌入文本的方式

your text value

代码构建(二)——ANT常用命令及初步认识ANT脚本_第27张图片

代码构建(二)——ANT常用命令及初步认识ANT脚本_第28张图片

3)指定namerefid

代码构建(二)——ANT常用命令及初步认识ANT脚本_第29张图片

       之前已提到过,每个task都有一个id,property是一种特殊的task,所以也可以为它设置id属性。

       4)指定file属性来设置多个Property

属性文件可以放在本地文件系统中,可以是网络上某个主机里,也可以是在当前classpath下。针对这几种情况,ant都做了支持。分别通过指定file,url,resource来加载属性文件。

另外,在使用这三种方式(file,url,resource)时,可以指定前缀prefix的。默认情况下是没有前缀的,也就是,定义的变量仍然属性文件中的变量名。如果指定了前缀,就是定义了这样的变量(前缀.属性名)。

●file属性是指定本地文件的路径,可以是绝对路径,也可以是相对路径。

●url 指定URL,通过网络资源来配置

代码构建(二)——ANT常用命令及初步认识ANT脚本_第30张图片

●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。

6ant执行参数传递

代码构建(二)——ANT常用命令及初步认识ANT脚本_第31张图片

代码构建(二)——ANT常用命令及初步认识ANT脚本_第32张图片

你可能感兴趣的:(java,运维,服务器,svn,贪心算法,数据结构)