代码改变世界

Ant tutorial(1)

2006-03-08 08:52  Jeff  阅读(457)  评论(0编辑  收藏  举报

     Apache Ant是一个基于Java的生成工具(another neat tool).使用 Ant,您能够编写单个生成文件,这个生成文件在任何 Java 平台上都一致地操作(因为 Ant 本身也是使用 Java 语言来实现的);这就是 Ant 最大的优势。

    Ant 没有定义它自己的自定义语法;相反,它的生成文件是用 XML 编写的.每个生成文件由单个 project 元素组成,该元素又包含一个或多个 target 元素。一个目标(target)是生成过程中已定义的一个步骤,它执行任意数量的操作,比如编译一组源文件。一次生成过程所必需的所有操作可以放入单个 target 元素中,但是那样会降低灵活性。将那些操作划分为逻辑生成步骤,每个步骤包含在它自己的 target 元素中,这样通常更为可取。这样可以执行整体生成过程的单独部分,却不一定要执行其他部分。例如,通过仅调用某些目标,您可以编译项目的源代码,却不必创建可安装的项目映像。

    顶级 project 元素需要包含一个 default 属性,如果在 Ant 被调用时没有指定目标,这个属性将指定要执行的目标。然后需要使用 target 元素来定义该目标本身。下面是一个最基本的生成文件:

<?xml version="1.0"?>
<project default="init">
   
<target name="init">
   
</target>
</project>

一次性打开和关闭一个元素也是可以做到的。因此,与其像上面那样target 元素使用单独的起始和结束标签,我们可以将它写为如下形式:       
<target name="init"/>

当元素没有包含任何内容时,更简练的形式会更清晰。
看一个具体的例子:

<?xml version="1.0"?>
<project default="init" name="Project Argon">
    
<description>
   A simple project introducing the use of     descriptive tags in Ant build files.
    
</description>
 
<!-- XML comments can also be used -->
   
<target name="init" description="Initialize Argon database">
 
<!-- perform initialization steps here -->
   
</target>
</project>

Ant 中用于设置属性的机制:  
<property name="metal" value="beryllium"/>

为了在生成文件的其他部分引用这个属性,使用以下语法:
                      
${metal}

为了使用这样一个值,它是另一个属性的值的组成部分,将标签写为下面这样:

<property name="metal-database" value="${metal}.db"/>

属性经常用于引用文件系统上的文件或目录,但是对于使用不同路径分隔符(例如,/ \)的平台来说,这样可能在跨越不同平台时导致问题。Ant location 属性专门设计用于以平台无关的方式包含文件系统路径。像下面这样使用 location 来代替value

<property name="database-file" location="archive/databases/${metal}.db"/>

用于 location 属性的路径分隔字符将被转换为当前平台的正确格式;而且由于文件名是相对的,它被认为是相对于项目的基目录。我们同样可以容易地写为下面这样:

<property name="database-file" location="archive\databases\${metal}.db"/>
定义依赖关系:使用 target 元素的 depends 属性来实现
<target name="init"/>
<target name="preprocess" depends="init"/>
<target  name="compile"depends="init,preprocess"/>
<target name="package" depends="compile"/>

这种方法允许您执行项目任何阶段的生成过程;Ant 会首先执行已定义的先决阶段。在上面的例子中,如果让Ant 完成 compile 步骤,它将判断出需要首先执行 init preprocess 这两个目标。init 目标不依赖其他任何目标,因此它将首先被执行。然后 Ant 检查 preprocesstarget,发现它依赖 init 目标;由于已经执行了后者,Ant 不会再次执行它,因而开始执行 preprocess 目标。最后可以执行 compile 任务本身。注意目标出现在生成文件中的顺序并不重要:执行顺序是由 depends 属性唯一确定的。

AntEclipse中——Ant 编辑器

     

名为 build.xml 的文件在 Eclipse 的导航程序视图中使用一个 Ant 图标来标识和装饰。右键单击这些文件会提供一个 Run Ant... 菜单选项,选择这个菜单选项将打开一个类似如下的对话框:

 

来自该生成文件的所有目标都显示出来了,而默认的目标则处于选中状态。在您决定是否要改变默认目标之后,请按 Run 按钮来运行 AntEclipse 将切换到 Console 视图,如下图所示。错误将以不同的颜色显示出来,可以单击输出中的任务名称来跳到生成文件中的对应调用点。

 

默认情况下,Eclipse 仅对名为 build.xml 的文件使用 Ant 编辑器,不过可以容易地配置该编辑器,使其识别具有其他名称的文件。从菜单上选择 Window=>Preferences,然后展开Workbench 组,再选择 File Associations 参数设置页面。然后为预期的文件名添加一种新的文件类型。例如,可以为名为 mybuild.xml 的所有文件添加一种新的文件类型。如果想对具有 .xml 后缀的所有文件(特殊文件名除外,比如 plugin.xml,它在 Eclipse 中覆盖通配符指定)做同样的事情,您甚至可以使用 *.xml 最后为这种新的文件类型添加一个关联的编辑器,然后从编辑器列表上选择 Ant editor,如下所示: