天天看点

用Ant构建脚本(4)

版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/1494378

 用Ant构建脚本(4)

五、Ant相关

1、标识过滤器

一个项目有一套标识,如果发现当一个文件被拷贝时,或许能自动进行扩充。当在这个支持任务中选择了过滤器-拷贝行为,才支持这种方式。在buildfile中,通过过滤器任务或许能设置它。

因为这能导致很大的潜在危害,在<filter>任务中标识的标识名在文件中必须以@token@的形式给出。这个标识语法匹配其它建立的系统的语法,该系统完成过滤并保留足够地程序和脚本语言的相交部分,如同文献系统。

※※注意:如果在一个文件中出现了带有@token@的标识,但却又没有任何过滤器与其相联系,这将不发生改变。因此,没有避免的方法可以用,但是只要你选择了合适的标识名,这不会产生任何问题。

警告:如果你拷贝二进制文件用过滤器来打开,你会被中断。因为这个特征只适用于文本文件。

2、象路径一样的结构

你可以指定PATH-和CLASSPATH-type引用,通过用“:”和“;”作为分隔符。Ant会为当前操作系统转换分隔符为正确的字符。

无论什么情况下,象路径一样的值是需要指定的,元素嵌套也可以用。下面这个是通常的结构:

<classpath>

  <pathelement path="%{classpath}"/>

  <pathelement location="lib/helper.jar"/>

</classpath>

属性的位置指定了一个单个的文件或羡慕基本目录的相关目录,路径属性可用带冒号或分号分隔开的位置列表。它需要预先指定,换句话说,带位置属性的多个元素都应该被指定。

另外,通过嵌套的<dirset>、<fileset>和<filelist>元素,能指定DirSet、FileSet和FileList。

  <pathelement path="${classpath}"/>

  <fileset dir="lib">

    <include name="**/*.jar"/>

  </fileset>

  <pathelement location="classes"/>

  <dirset dir="${build.dir}">

    <include name="apps/**/classes"/>

    <exclude name="apps/**/*Test*"/>

  </dirset>

  <filelist refid="third-party_jars">

如果你想为几个任务使用同样的路径结构,你可以在同一级的target中用<path>元素来定义它,然后通过id属性来引用它。

例如:

<path id="base.path">

  <pathelement path="${classpath"/>

</path>

<path id="tests.path">

  <path refid="base.path"/>

  <pathelement location="testclasses"/>

3、命令行参数

有几个带参数的任务可以在命令行中得到处理。指定包含空格符的参数使它变得更容易,嵌套的arg元素也能使用。

value,一个单个的命令行参数,能包含空格;

file,作为命令行参数的文件名,执行时以文件的绝对名来代替;

path,作为象路径的字符串来处理,作为单个的命令行参数,可以使用“;”或“:”来作为分隔符,Ant会把它转换为本地平台的习惯。

line,命令行参数的空格定界线列表。

如果可能,尽量避免使用命令行方式。

4、参考

buildfile元素的id属性能用来引用它们自己。这有助于到处复制一个XML小片断,例如:

<project...>

  <target...>

    <rmic...>

      <classpath>

        <pathelement location="lib/"/>

        <pathelement path="${java.class.path}/"/>

        <pathelement path="${additional.path}"/>

      </classpath>

    </rmic>

  </target>

    <javac...>

    </javac>

</project>

可以写成如下:

  <path id="project.class.path">

    <pathelement location="lib/"/>

    <pathelement path="${java.class.path}/"/>

    <pathelement path="${additional.path}"/>

  </path>

      <classpath refid="project.class.path"/>