Ant_使用ant的任务(003)

命令行选项

一个有用的选项就是-D,它用于设置随后可以在生成文件中使用的属性。这对于配置您想要以某种方式开始的生成过程是
非常有用的。例如为了将name属性设置为某个特定的值,您会使用一个类似于下面这样的选项: - -Dmetal=beryllium
这个功能可以用于覆盖生成文件中的初始属性设置。正如前面指出过的,属性的值一经设置就不能改变。-D标志在读取生成文件中
的任何信息之前设置某个属性,由于生成文件中的指派落在这个初始指派之后,因为它不会改变其值。

编译源代码
<javac srcdir="src">
这个标签寻找src目录中以.java为扩展名的所有文件,并且对它们调用javac编译器,从而在相同的目录中生成类文件。当然将类文件
放在一个单独的目录结构中通常会更清晰,可以通过添加destdir属性来让ant做到这点。

其他有用的属性包括
-classpath:等价于javac的-classpath选项
-debug="true",指示编译器应该带调试信息,编译源文件

javac的一个重要的特点在于,它仅编译那些它认为需要编译的源文件。如果某个类文件已经存在,并且对应的源文件自从该类文件生成依赖
还没有改变过,那么该源文件就不会被重新编译。

javac的输出显示了实际被编译的源文件的数目。

这种行为刻画了ant的许多任务的特点,如果某个任务能够确定所请求的操作不需要执行,那么该操作就会被跳过。


创建jar文件

在编译java源文件之后,结果类文件通常被打包到一个jar文件中,这个文件类似于zip归档文件。每个jar文件都
包含一个清单文件,它可以指定该jar文件的属性
下面是ant中jar任务的一个简单用例
<jar descfile="package.jar" basedir="classes"/>

这将创建一个名为package.jar的jar文件,并把classes目录的所有文件添加到其中(jar文件能够包含任意类型的文件,而不只是类文件)。
此处没有指定清单文件,因为ant将提供一个基本的清单文件。

manifest属性允许指定一个用作该jar文件的清单文件。清单文件的内容还可以使用manifest任务在生成文件中指定。这个任务能够向文件系统写入一个
清单文件,或者能够实际嵌套在jar之内,以便一次性的创建jar文件和清单文件。


时间戳生成

在生成环境中使用当前时间和日期,以某种方式标记某个生成任务的输出,以便记录它是何时生成的,这经常是可取的。这可能涉及编辑一个文件,以便
插入一个字符串来指定日期和时间,或将这个信息合并到jar或者zip文件的文件名中。
这种需要是通过简单但是非常有用的tstamp任务来解决的。这个任务通常在某次生成过程开始时候调用,比如在一个init目标中。这个任务不需要属性,
许多情况下只需要<tstamp/>就足够了。

tstamp不产生任何输出,相反根据当前系统时间和日期设置ant属性。下面是tstamp设置的一些属性,对每个属性的一些说明,以及这些属性可被设置到的
值的例子。

属性 说明 例子
DSTAMP 设置为当前日期,默认的格式为yyyymmdd 20030909
TSTAMP 设置为当前时间,默认的格式为hhmm 1603
TODAY 设置为
当前日期, 带完整的月份 2003年6月6日

在调用tstamp任务之后,我们能够根据日期命名该jar文件,如下所示,
<jar destfile="package-${DSTAMP}.jar" basedir="classes"/>

范例:
<?xml version="1.0" encoding="UTF-8"?>
<project name="myAntProject" basedir="." default="package">

<property name="compile" value="compile"/>
<property name="dist" value="dist"/>

<target name="init">
</target>

<target name="preprocess" depends="init">
<mkdir dir="${compile}"/>
<mkdir dir="${dist}"/>
</target>

<target name="compile" depends="init,preprocess">
</target>

<target name="package" depends="compile">
</target>

<target name="mycompile" depends="preprocess">
<javac srcdir="src" destdir="${compile}"/>
</target>

<target name="dist" depends="mycompile">

<tstamp/>

<jar destfile="${dist}/package-${DSTAMP}.jar" basedir="${compile}">
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Main-Class" value="com.javase.ant.AntSwing"/>
</manifest>
</jar>
</target>
</project>


文件系统操作

创建和删除目录
最基本的文件系统操作之一就是创建目录或者文件夹。做这项工作的任务名为mkdir
<mkdir dir="archive/metals/zinc"/>
mkdir任务不会发出错误消息,
mkdir任务的另一个有用的特性就是它的如下特性:在父目录还不存在时创建它们
如果目标目录已经存在,而只是假设它的工作任务已经完成,从而什么也不做

删除目录
<delete dir="archive/metals/zincs"/>
这将删除目录,连同它的所有文件以及子目录。使用file属性而不是dir属性可以指定要删除的单个文件。

复制和移动文件及目录
<copy file="src/TestAnt.java" tofile="TestCopy.java"/>
还可以使用move来执行重命名而不是拷贝文件
<move file="src/TestAnt.java" tofile="src/TestRename.java"/>

另一个常用的文件系统操作是将文件复制或移动到另一个目录
<copy file="src/TestAnt.java" todir="archive"/>
<move file="src/TestAnt.java" todir="archive"/>


范例:
<?xml version="1.0" encoding="UTF-8"?>
<project name="myAntProject" basedir="." default="package">

<property name="compile" value="compile"/>
<property name="dist" value="dist"/>

<target name="init">
</target>

<target name="preprocess" depends="init">
<mkdir dir="${compile}"/>
<mkdir dir="${dist}"/>
</target>

<target name="compile" depends="init,preprocess">
</target>

<target name="package" depends="compile">
</target>

<target name="mycompile" depends="preprocess">
<javac srcdir="src" destdir="${compile}"/>
</target>

<target name="dist" depends="mycompile">

<tstamp/>

<jar destfile="${dist}/package-${DSTAMP}.jar" basedir="${compile}">
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Main-Class" value="com.javase.ant.AntSwing"/>
</manifest>
</jar>
</target>

<target name="deletefile">
<delete file="${dist}/package.jar"></delete>
</target>

<target name="copyfile">
<copy file="src/com/javase/ant/TestCopy.java" tofile="d:/TestCopy2.java"></copy>
</target>

<target name="copyfile2">
<copy file="src/com/javase/ant/TestCopy.java" todir="d:/"></copy>
</target>

<target name="movefile">
<move file="src/com/javase/ant/TestCopy.java" todir="d:/"></move>
</target>
</project>

posted @ 2012-06-09 12:49  雪中飞雁  阅读(172)  评论(0)    收藏  举报