技术开发 频道

Apache Ant对决Make:实战Java构建工具

 对应的build.xml

<?xml version="1.0"?>

<project name="OwnTaskExample1" default="main" basedir=".">
<taskdef name="mytask" classname="MyTask"/>

<target name="main">
<mytask message="Hello World! MyTask works!"/>
</target>
</project>

  算上MyTask的编译,完整的Ant脚本为:

<?xml version="1.0"?>

<project name="OwnTaskExample2" default="main" basedir=".">

<target name="build" >
<mkdir dir="build"/>
<javac srcdir="source" destdir="build"/>
</target>

<target name="declare" depends="build">
<taskdef name="mytask"
classname
="MyTask"
classpath
="build"/>
</target>

<target name="main" depends="declare">
<mytask message="Hello World! MyTask works!"/>
</target>
</project>

  Ant重要标签列表

  <project> 标签

  每个构建文件对应一个项目。 标签时构建文件的根标签。它可以有多个内在属性,如下:

  (1) default表示默认的运行目标,这个属性是必须的。

  (2) basedir表示项目的基准目录。

  (3) name表示项目名。

  (4) description表示项目的描述。

  <target>标签

  一个项目标签下可以有一个或多个target标签。一个target标签可以依赖其他的target标签。一个target只能被执行一次, 即使有多个target依赖于它。如果没有if或unless属性,target总会被执行。target标签其属性如下。:

  (1).name表示标明,这个属性是必须的。

  (2).depends表示依赖的目标。

  (3)if表示仅当属性设置时才执行。

  (4)unless表示当属性没有设置时才执行。

  (5)description表示项目的描述。

  <mkdir>标签

  该标签用于创建一个目录,它有一个属性dir用来指定所创建的目录名,其代码如下:

<mkdir dir=”${class.root}”/>

  <jar>标签

  该标签用来生成一个JAR文件,其属性如下。

  (1) destfile表示JAR文件名。

  (2) basedir表示被归档的文件名。

  (3) includes表示别归档的文件模式。

  (4) exchudes表示被排除的文件模式。 

     <javac>标签

  该标签用于编译一个或一组java文件,其属性如下。

  (1).srcdir表示源程序的目录。

  (2).destdir表示class文件的输出目录。

  (3).include表示被编译的文件的模式。

  (4).excludes表示被排除的文件的模式。

  (5).classpath表示所使用的类路径。

  (6).debug表示包含的调试信息。

  (7).optimize表示是否使用优化。

  (8).verbose 表示提供详细的输出信息。

  (9).fileonerror表示当碰到错误就自动停止。

  <java>标签

  该标签用来执行编译生成的.class文件,其属性如下。

  (1).classname 表示将执行的类名。

  (2).jar表示包含该类的JAR文件名。

  (3).classpath所表示用到的类路径。

  (4).fork表示在一个新的虚拟机中运行该类。

  (5).failonerror表示当出现错误时自动停止。

  (6).output 表示输出文件。

  (7).append表示追加或者覆盖默认文件。

  <delete>标签

  该标签用于删除一个文件或一组文件,其属性如下。

  (1).file表示要删除的文件。

  (2).dir表示要删除的目录。

  (3).includeEmptyDirs 表示指定是否要删除空目录,默认值是删除。

  (4).failonerror 表示指定当碰到错误是否停止,默认值是自动停止。

  (5).verbose表示指定是否列出所删除的文件,默认值为不列出。

  <copy>标签

  该标签用于文件或文件集的拷贝,其属性如下。

  (1).file 表示源文件。

  (2).tofile 表示目标文件。

  (3).todir 表示目标目录。

  (4).overwrite 表示指定是否覆盖目标文件,默认值是不覆盖。

  (5).includeEmptyDirs 表示制定是否拷贝空目录,默认值为拷贝。

  (6).failonerror 表示指定如目标没有发现是否自动停止,默认值是停止。

  (7).verbose 表示制定是否显示详细信息,默认值不显示。

  Ant调试

  Eclipse 3.1及以上版本开始支持Ant调试。以下是Eclipse用于调试的具体步骤。

  首先,在Ant脚本的target中设置断点,这个与Java文中设置断点几乎没有区别,如下图所示。但是Ant脚本不支持Hit Count与条件断点。

  接下来,通过Debug As –> Ant Build启动Ant调试。与Java调试一样,调试光标停在断点处,如下图所示。Ant支持单步断点执行命令Step Over与 Run to Line。

  除此之外,我们可以使用Debug视图查看变量值,如图所示。

  如果是远程调试,需要在Ant脚本中添加相应的参数,如下: 

<java classname="..." fork="true">
<jvmarg value="-Xdebug" />
<jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5432" />
...
</java>

      总结

  总之,Ant具有两个突出的优点。一方面,作为一个Java应用,Ant具有跨平台的特点。另一方面,Ant脚本是标准的XML,可读性好。Eclipse对Ant脚本也提供强大的内置支持。从这个角度来说,Apache Ant无论是作为Another Neat Tool,或者蚂蚁,笔者都欣然接受。

0
相关文章