ant转帖

2、Environment环境变量
假设你根据你的工作环境配置了下面的property:
<property name="xalan.home" value="C:/java/xalan-j_2_1_0"/>
显然你的buildfile到其他开发人员的环境下面还能继续有效的可能性很小,因为其他人的xalan很可能在其他目录,使用Environment环境变量可以解决这个问题
<property environment="env"/>
<property name="xalan.home" value="${env.XALAN_HOME}"/>
<target name="checkXalanHome" unless="env.XALAN_HOME">
<fail message="XALAN_HOME must be set!"/>
</target>
关键是:
<property environment="env"/>
设置了这个属性之后,以后可以直接引用环境变量,只要前面加一个env.的前缀就可以了。

3、fileset文件集
fileset 表示了一套文件的集合, 通常定义为project-level,ANT的task可以通过显式(explicit)的方式来引用或者直接嵌套 fileset,如果是直接嵌套,这个时候fileset是task-level的,很多ANT的task都支持隐式(implicit)的 fileset,也就是说这些TASK支持fileset的所有属性和嵌套的子元素, 和filelist不同的是fileset所表示的文件必须存在。 Fileset可以定义为target-level的,并通过他们的id来引用。
fileset支持以下常用的属性(只列出常用的,其他的请参考官方文档):
attribute       |  description
----------------|------------------------------------------------
id              |可选,定义了id将来就可以引用了
dir             | 必须指定,用于指定文件所在的目录
excludes        |可选,用于指定在dir指定的目录下那些不应该包括进来的文件,内容是逗号分割的文件模式(file pattern)。
excludesfile    |跟excludes类似,区别是只能包括单独的文件模式(不能用逗号分隔多个文件模式),通常情况下我习惯使用excludes,因为excludes也包括了excludesfile的功能
includes        |可选,用于指定在dir指定的目录下那些需要包括进来的文件,内容是逗号分割的文件模式(file pattern)。
includesfile    |跟includes类似,区别是只能包括单独的文件模式(不能用逗号分隔多个文件模式),通常情况下我习惯使用includes,因为includes也包括了includesfile的功能

除了上面的属性之外,fileset还可以嵌套多个(0...n)以下的patternset元素
<exclude> , <include> , <patternset> , <excludesfile> , <includesfile> .
关于patternset的用法,我会在patternset这个部分专门总结。

例子:
<fileset id="sources1" dir="src"
includes="**/*.java"
excludes="**/test/**/*.java">
</fileset>
等价于
<fileset id="sources2" dir="src">
<include name="**/*.java"/>
<exclude name="**/test/**/*.java"/>
</fileset>
等价于
<fileset id="sources3" dir="src">
<patternset>
<include name="**/*.java"/>
<exclude name="**/test/**/*.java"/>
</patternset>
</fileset>
也等价于
<patternset id="non.test.source">
<include name="**/*.java"/>
<exclude name="**/test/**/*.java"/>
</patternset>
<!-- later in the same buildfile -->
<fileset id="sources4" dir="src">
<patternset refid="non.test.source"/>
</fileset>

 

4、patternset模式集
fileset 将文件合成一个组,patternset将模式合成一个组,它们的概念很接近,其实fileset依赖于patternset来选择文件,patternset可以表达为target-level,然后通过它的id来引用,也可以直接嵌套在fileset下面,那些支持隐式 (implicit)的fileset的task也支持嵌套的patternset。
patternset支持includes, excludes, includesfile,excludesfile四个属性,这跟fileset的用法一样,还支持以下的嵌套的元素:
0..n 个嵌套的 <include>和<exclude>元素,它们支持以下属性
attribute       |  description
----------------|------------------------------------------------
name            |必须指定,内容为相应的include和exclude的模式。
if              |可选,和target的if属性的用法一样
unless          |可选,和target的unless属性的用法一样

0..n 个嵌套的 <includesfile> 和 <excludesfile> 元素,它们支持以下属性:
attribute       |  description
----------------|------------------------------------------------
name            |必须指定,内容为相应的include和exclude的模式,但是只能是单个
if              |可选,和target的if属性的用法一样
unless          |可选,和target的unless属性的用法一样

例子:
patternset的定义
<patternset id="xml.files">
<include name="**/*.dtd,**/*.xml,**/*.xslt"/>
</patternset>

patternset的引用
<fileset dir="${src.dir}">
<patternset refid="${xml.files}"/>
</fileset>

 1. available
   格式:
  

Xml代码 复制代码  收藏代码
  1. <available property="prefix"  
  2.        value="${basedir}/.."  
  3.        file="${basedir}/../build/jetty-build.xml"/>  
   <available property="prefix"
          value="${basedir}/.."
          file="${basedir}/../build/jetty-build.xml"/>
   


   用途:
   如果指定的file存在,就设置这个property为指定的value

2. condition
   格式:
  
Xml代码 复制代码  收藏代码
  1. <condition property="prefix" value="${basedir}">  
  2.     <not>  
  3.        <isset property="prefix"/>  
  4.     </not>  
  5. </condition>  
   <condition property="prefix" value="${basedir}">
       <not>
          <isset property="prefix"/>
       </not>
   </condition>
   

  
   用途:
   如果满足了指定的条件(prefix没有被设置),则设置这个property为指定的value

3. javac
   格式:
  
Xml代码 复制代码  收藏代码
  1. <javac source="${JAVAC_SOURCE}" target="${JAVAC_TARGET}"    
  2.    executable="${JAVAC_EXE}" fork="yes" destdir="classes"    
  3.    classpath="${outDir}" classpathref="libraries"  
  4.    optimize="off" verbose="off" debug="on"  
  5.    memoryInitialSize="256M" memoryMaximumSize="512M">  
  6.    <src path="${srcDir}"/>  
  7.    <include name="**/*.java"/>  
  8. </javac>  
   <javac source="${JAVAC_SOURCE}" target="${JAVAC_TARGET}" 
      executable="${JAVAC_EXE}" fork="yes" destdir="classes" 
      classpath="${outDir}" classpathref="libraries"
      optimize="off" verbose="off" debug="on"
      memoryInitialSize="256M" memoryMaximumSize="512M">
      <src path="${srcDir}"/>
      <include name="**/*.java"/>
   </javac>
   

   用途:
   调用指定的javac去编译src下面的所有的java源文件。
   source - javac1.4之前的版本忽略此项。可以设置为ant.build.javac.source
   target - VM的版本号,据此来生成类文件。默认值依赖当前的JVM。可以设置为ant.build.javac.target
   executable - javac可执行文件的完整路径,当fork设置为yes,默认值为运行ant的编译器
   fork - 为true时在外部启用一个新的JDK编译线程进行编译,默认值为no
   destdir - 类文件的保存位置
   classpath - 使用的类路径
   classpathref - 使用的类路径,其它地方定义的类路径的引用
   optimize - 是否启用编译优化,默认值是off。自JDK1.3后被忽略
   verbose - 在编译时是否显示详细的信息
   debug - 是否为编译生成调试信息,默认值为off。如果设置为true,根据debuglevel的属性值来决定级别
   memoryInitialSize - 如果 javac 在外部运行,则是底层 VM 的初始内存大小;否则将被忽略。默认为标准 VM 内存设置。(例如:83886080、81920k 或 80m)
   memoryMaximumSize - 如果 javac 在外部运行,则是底层 VM 的最大内存大小;否则将被忽略。默认为标准 VM 内存设置。(例如:83886080、81920k 或 80m)
   srcdir - Java源文件的位置
   includes - 必须包括的文件模式的列表,以逗号或空格分隔。如果忽略,将包括所有文件

 

你可能感兴趣的:(ant转帖)