Ant学习入门

来源:互联网 发布:西门子人机界面软件 编辑:程序博客网 时间:2024/06/11 06:00

ANT 学习

入门

1.    属性

<property name=”metal”value=”beryllium”/>

为了在其他地方引用它,可以使用如下语法:${metal}

ANT中定义了许多预定义属性。首先,在JAVA环境设置用于运行ANT的所有系统属性,均可作为ANT属性使用,比如${user.home}、${user.name}等,还有ANT自己的属性,包括${ant.version}等。以及${basedir},这个属性是项目目录的绝对路径(由包含生成文件的目录定义,或者有project元素的可选basedir属性定义)。

对于文件系统的引用如下:

<property name=”database-file” location=”archive/database/test.db”/>

2.    定义依赖关系

在target中使用depends属性指定依赖的另外一个target。

ANT基础知识

1.编译源代码

<javacsrcdir=”src” />

这个标签寻找SRC目录中以.java为扩展名的所有文件,并对它们调用javac编译器,从而在相同的目录中生成类文件。而下面语句:

<javacsrcdir=”src” destdir=”build” />或

<javacsrcdir=”${src.dir}” destdir=”${build.dir}” />

则将src目录中的.java文件编译到build目录中。其中,destdir指定生成目录。没有的话就创建。其他属性包括:

Classpath:等价于 javac 的 -classpath 选项。

Debug=”true”:指示编译器应该带调试信息编译源文件。

javac 任务的一个重要特点在于,它仅编译那些它认为需要编译的源文件。如果某个类文件已经存在,并且对应的源文件自从该类文件生成以来还没有改变过,那么该源文件就不会被重新编译。javac任务的输出显示了实际被编译的源文件的数目。

2.编译器选择

ANT的javac任务默认行为是调用运行ANT本身的任何JVM的标准编译器。Javac的 fork属性设置为true,可以帮助你选择一个特定的编译器,如下:

<javac srcdir=”src” fork=”true” executeable=”d:\sdk141\bin\javac”memoryMaximumSize=”128m”>

其中memoryMaximumSize属性设置一个最大内存值。

3.创建JAR文件

<jar destfile=”package.jar” basedir=”classes” />

将classes目录中所有文件(包括非.class文件)添加到package.jar中。此处没有指定清单文件,因此ANT将提供一个基本的清单文件。

Manifest属性允许指定一个用作该JAR文件的清单文件。如下:

<jar destfile=”package.jar” basedir=”classes”>

 <manifest>

<attribute name=”Built-By”value=”${user.name}” />

<attribute name=”Main-class”value=”package.Main” />

 </manifest>

</jar>

及在JAR包中的META-INF目录下的MANIFEST.MF文件中添加清单内容。

4.时间戳生成

<tstamp/>标签生成时间戳

  

DSTAMP

   

设置为当前时间,格式为YYYYMMDD

   

20031217

   

TSTAMP

   

设置为当前日期,格式为HHMM

   

1603

   

TODY

   

设置为当前日期,带完整的月份

   

2003年12月17日

 

<target name="jar"depends="compile">

        <tstamp/>

        <jardestfile="build-${TODAY}.jar"basedir="build"/>

</target>

文件系统操作

1.    创建和删除目录

创建:</midir dir=”archive/metals/zinc” />

ANT中,使用”/”作为目录分割符。

删除:<delete dir=”archive/metals/zinc” />

这将删除指定的目录连同它所包含的所有文件已经子目录。如果使用file属性而不是dir属性可以指定要删除的单个文件。

2.    复杂和移动文件及目录

拷贝:<copy file=”src/Test.java” tofile=”src/TestCopy.java” />

使用todir属性,可以指定拷贝到另一个目录

<copy file=”src/Test.java” todir=”archive” />

使用<fileset>可以同时拷贝多个文件:

<copytodir="${backup.dir}">

<filesetdir="${build.dir}"/>

</copy>

 

移动:<move file=”src/Test.java” tofile=”src/TestCopy.java” />

相当于重命名操作。同样,使用todir属性可以移动到不用目录。

3.    创建和解压缩ZIP及TAR文件

创建

ZIP文件:<zipdestfile=”output.zip” basedir=”output” />

TAR文件:<gzipdestfile=”output.zip” basedir=”output” />

还可以使用GZIP和BZIP任务来压缩文件。如下:

<gzip src=”output.tar” zipfile=”output.tar.gz”/>

 

 

解压

<unzip src=”output.tar.gz” dest=”extractDir” />

4.    替换文件中的标记

Replace任务,它执行文件中的查找和替换操作。Token属性指定要查找的字符串,value属性指定一个新的字符串,查找到的标记字符串的所有实例都被替换为这个新的字符串。如下:

<replace file=”input.txt” token=”old” value=”new ”/>

如果加上summary=”true”属性,这将导致该任务输出找到和替换的标记字符串实例的数目。

其他

1.    模式匹配

*:它匹配零个或多个字符

?:它仅匹配一个字符

如下操作:

<copytodir="build">

<fileset dir="src">

 <include name=”*.java” />

</fileset>

</copy>

同样的,也可指定exclude元素,用于排除一些文件。

2.    使用选择器

  

Size

   

根据文件的字节大小来选择文件。When属性用来设置比较的性质(less,more,equal),value属性定义每个文件将与之作比较的目标大小。

   

Contains

   

只有包含给定文本字符串(有text属性指定)的文件才匹配这个选择器。默认情况下,查找操作是大小写敏感的,添加casesensitive=”no”可以改变默认值

   

Filename

   

Name属性指定文件名要与之匹配的模式。本质上与include元素相同,以及与指定了negate=”yes”时的exclude元素相同。

   

present

   

从当前目录结构中选择如下文件:它们与指定的targetdir目录中的文件具有相同的名称和相同的目录结构。

   

Depend

   

与present选择器具有相同的效果,只不过匹配的文件被限制到相对于targetdir位置中的对应文件来说,最近已修改过的那些文件。

   

Date

   

基于其最后修改日期选择文件。When属性指定作为比较的性质是before、after还是equal,datetime属性指定与之比较的日期和时间。具有的给定格式mm/dd/yyyy hh:mm am_or_pm。Windows平台上有一个内置的2秒偏移,以允许底层文件系统的不精确性——这可能导致匹配的文件数量超过预期。可通过granularity属性来更改(单位:毫秒)

   

Depth

   

这个选择器检查每个文件的目录结构层次数目。Min和/或max属性用于选择具有想要的目录层次数目的文件。

 

还可以通过一个选择器容器内嵌一个或多个选择器来组合选择器。最常用的选择器容器and仅选择它包含的所有选择器都选择了的文件。其他选择器容器包括or、not、none、majority

如下:

<fileset dir=”dir>

 <and>

<containstext=”hello” />

<size value=”512”when=”more” />

 </and>

</fileset>

3.    将生成文件链接起来

使用ANT任务从一个ANT生成中调用另一个ANT生成很容易。可以使用antfile属性,仅指定那些要使用的生成文件,ant将生成该生成文件的默认目标。如下:

<ant antfile=”sub-build.xml” />

在父生成文件中定义的任何属性默认将传递给子生成文件,可以通过指定inheritAll=”false”来避免。通过使用property元素来传入显式的属性也是可以做到的——即使将inheritAll设置为false,这些属性也仍然适用于子生成文件。这个功能和适合用于给子生成文件传入参数。如下:

下面是我们想调用的一个生成文件:

<?xml version=”1.0”?>

<project default=”showMessage”>

 <target name=”showMessage”>

   <echo message=”Message=${message}” /> //echo简单的输出给定的消息

 </target>

</project>

下面调用第一个文件的第二个文件,它还给第一个文件传入message属性:

<project default=”callSub”>

 <target name=”callSub”>

<antantfile=”sub.xml” target=”showMessage” inheritAll=”false”>

  <property name=”message” value=”Hello fromparent build” />

</ant>

 </target>

</project>

原创粉丝点击