`
夜乡晨
  • 浏览: 37446 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

以编程方式调用 Apache Ant

阅读更多
从 Java 代码使用 Ant 构建文件
引言

Apache Ant 是一个基于 Java 的开放源代码构建实用工具。人们常把它与 Make 进行比较,Make 长期以来一直用于帮助自动完成构建过程。经过不同版本的改进,Ant 已发展成一个丰富的功能库,使其成为适用于许多场合的合适工具。例如,Ant 的当前版本 (V1.6.2) 提供的一些任务包括了操作文件内容、执行命令行和 Java 程序以及启动 SSH 和 FTP 连接的功能。

由于定义所有构建逻辑的 Ant 构建文件都是用 XML 编写的,因此,如果需要更改逻辑,则不需要重新编译代码,也不需要了解语言特定的语法。此外,Ant 具有高度的可扩展性。它提供了使用 Java™ 创建您自己的自定义任务的功能,之后又可以通过与使用任何其他 Ant 任务相同的方式使用 Java™。所有这些联系在一起意味着 Ant 是可以执行很多任务的极好选择。

在大多数情况下,一旦创建好构建文件,就可以从带有适当目标(例如,ant dist)的命令行调用 Ant 可执行文件来执行它们,也可以使用 WebSphere® Studio Application Developer (Application Developer) 内置 Run Ant 命令来执行它们。然而,也存在更适合于从 Java 程序中启动 Ant 的情况。这可能要根据 Java 程序检测到的某组条件来开始一系列的操作,或者,它只是利用程序内丰富的 Ant 内置功能。在这种情况下,您需要继续创建一个构建文件,就像从命令行调用 Ant 时那样,但之后您需要将对 Ant Java API 的正确调用插入到程序中。本文将通过检查必要的 Java 代码并向您展示如何在 Application Developer 内运行此代码来帮助您处理此过程。

本文只包括使用构建文件从 Java 中调用 Ant 任务的情况。有关此过程的更多信息,请参阅《Apache Ant 用户手册》中的 Using Ant Tasks Outside of Ant。

回页首

以编程方式调用 Ant

本文中的示例使用 WebSphere Studio Application Developer 5.1.2。这些示例可能也适用于其他版本,但尚未经过测试。您可以下载免费试用版本。

从 Application Developer 中创建 Ant 构建文件

在本文中,我们将简要地回顾构建文件的创建以及其他 Ant 基础知识,但并不详细讨论。有关详细信息,请参阅相关内容和参考资料部分。

首先,创建一个新的 Java 项目。转到 File => New => Project。选择 Java => Java Project 并单击 Next。输入 antSample 作为项目名称,然后单击 Finish。如果系统询问您是否要切换到 Java 透视图,单击 Yes。

图 1:创建新的 Java 项目
图 1:在 Application Developer 中创建新的 Java 项目

现在创建一个简单的 Ant 构建文件,以便您可以对调用进行测试。Ant 构建文件只是一个 xml 文件,因此右键单击 antSample 项目,并选择 New => Other...。然后选择 XML => XML 并单击 Next。选择 Create an XML file from scratch,然后单击 Next。将您的文件命名为 build.xml,然后单击 Finish。

图 2:构建文件创建后的包浏览器
图 2:构建文件创建后的包浏览器

将以下代码复制到 xml 文件中,以创建一个简单的构建文件。

<project name="testproject" default="test" basedir=".">
<target name="test">
<echo message="Hello World" />
</target>
</project>


保存文件。要验证它是否是一个有效的构建文件,请使用 Application Developer 的内置 Ant 来运行它。在 Package Explorer 中右键单击 build.xml 文件,并选择 Run Ant...。目标“test”应已选中以待运行,因为它是缺省目标,因此单击 Run。您应在控制台中看到如下输出:

Buildfile: C:\tempWorkspace\antSample\build.xml
test:
        [echo] Hello World
BUILD SUCCESSFUL
Total time: 4 seconds


创建类来调用 Ant

既然您已验证构建文件的正确性,那么您需要创建一个可以用于通过 Ant Java API 调用此构建文件的 Java 类。右键单击 antSample 项目,并选择 New => Class。输入 AntSample 作为此类的名称,并选中 Which method stubs would you like to create? 问题下 public static void main(String[] args) 旁边的复选框。单击 Finish,系统将创建您的 AntSample 类及其主方法。

由于您将使用 Ant API,因此接下来您需要将 JAR 文件 Ant 需求添加到类路径中。右键单击 antSample 项目,并从菜单中选择 Properties。单击 Java Build Path,选择 Libraries 选项卡,然后选择 Add External Jars...。定位您安装 WebSphere Studio 的文件夹,然后导航到 eclipse => plugins => org.apache.ant_1.5.3。选择 ant.jar 并单击 Open。再次选择 Add External Jars...,然后导航到 eclipse => plugins => org.apache.xerces_4.0.13。

选择 xerces.jar 和 xmlParserAPIs.jar,然后再次单击 Open。现在,您的构建路径应如下所示:

图 3:新的 Java 构建路径
图 3:新的 Java 构建路径

单击 Properties 对话框上的 OK,返回到您的 AntSample 类。将以下代码添加到 AntSample 的主方法中:

File buildFile = new File("build.xml");
Project p = new Project();
p.init();
ProjectHelper helper = ProjectHelper.getProjectHelper();
helper.parse(p, buildFile);
p.executeTarget(p.getDefaultTarget());


右键单击文件中的任何位置,并选择 Source => Organize Imports。这将清除任何错误。保存此文件。

通过在 Package Explorer 中高亮显示 AntSample.Java,然后转到 Run => Run As => Java Application 来运行此代码。如果切换到此控制台,您将看到此程序正常运行和退出,但它不会产生任何输出。

为了找出原因,让我们检查一下代码,看看它在做什么。首先,它从构建文件创建一个文件对象,然后创建一个新的 Project 对象。Project 是 Ant 用于表示带有其所有目标、任务和属性的 Ant 项目的 Java 类。它初始化此项目;这将导致该项目执行某一内部安装程序。然后,它定位缺省的 ProjectHelper,并使用该 ProjectHelper 分析此构建文件,并将来自构建文件的信息填充到项目中。接下来,它将执行此项目的缺省目标。

您还可以通过传递目标名称,例如 p.executeTarget("test"),来执行此构建文件中的任何目标(在此构建文件中,碰巧只有一个目标)。即使所有这些操作都成功完成,您仍看不到任何输出,因为 Ant 不知道应将结果输出到哪里。当通过命令行或 Application Developer 执行 Ant 时,输出将自动转到控制台。但是此处您需要明确指出。您需要添加一个 BuildLogger 作为侦听器,这样,它就可以接收构建过程中发出的事件通知。

记录器

您可以使用几种不同的 BuildLogger,包括 DefaultLogger、AnsiColorLogger、MailLogger 和 NoBannerLogger。您也可以编写自己的 BuildLogger,并将其注册到项目中。事实上,您可以注册实现 BuildListener 接口的任何类,以接收构建事件,并对您的类中的这些构建事件做出响应(例如,接收一个 taskCompleted 事件,并增加进度栏)。对于这种情况,请注册最简单的记录器和 DefaultLogger,并将输出消息直接输出到标准输出,将错误消息直接输出到标准错误。要做到这一点,请在创建项目之后初始化项目之前添加以下代码行:

DefaultLogger consoleLogger = new DefaultLogger();
consoleLogger.setErrorPrintStream(System.err);
consoleLogger.setOutputPrintStream(System.out);
consoleLogger.setMessageOutputLevel(Project.MSG_INFO);
p.addBuildListener(consoleLogger);


请注意,可以将此消息输出配置为几种不同的级别。右键单击此类文件中的任何位置,并选择 Source => Organize Imports,然后保存。现在,通过转到 Run 菜单并选择 Run Last Launched 来再次运行该程序。您将看到,您正在获取一些输出,但它们与您之前获取的输出并不完全相同。您现在在控制台中看到的输出应为:

test:
     [echo] Hello World


构建事件

虽然您现在正在获取输出,但却没有获取关于构建操作是否成功完成或者构建的运行时间的任何信息。最终您还需要激发某些事件,以让 Ant 知道正在启动构建,并且已完成。您还需要将 execute() 方法抛出的任何异常加入到 fireBuildFinished 方法中,以便能够传递到侦听器。添加此代码后,主方法如下所示:

File buildFile = new File("build.xml");
Project p = new Project();

DefaultLogger consoleLogger = new DefaultLogger();
consoleLogger.setErrorPrintStream(System.err);
consoleLogger.setOutputPrintStream(System.out);
consoleLogger.setMessageOutputLevel(Project.MSG_INFO);
p.addBuildListener(consoleLogger);
try {
p.fireBuildStarted();
p.init();
ProjectHelper helper = ProjectHelper.getProjectHelper();
helper.parse(p, buildFile);
p.executeTarget(p.getDefaultTarget());
p.fireBuildFinished(null);
} catch (BuildException e) {
p.fireBuildFinished(e);
}


右键单击类文件中的任何位置,并选择 Source => Organize Imports,然后保存。此时,如果您运行此代码,就会看到所希望的输出。要更改输出中的信息数量,请更改消息输出级别(而不是尝试更改 Project.MSG_VERBOSE)。
Ant 的旧版本

本文本中的代码适用于 Apache Ant 1.5 或更高版本。如果需要使用 Ant 的旧版本,您需要做一些更改。首先,替换以下代码:

ProjectHelper helper =
ProjectHelper.getProjectHelper();
helper.parse(p, buildFile);


您需要使用下面的代码(现已弃用)来达到相同的效果:

Project.configureProject(p, buildFile);


其次,在 Ant 的版本 1.4 中,激发事件的方法受到保护。如果您只需使用 1.4 或更早期的版本,您完全可以忽略这些方法。但是,如果您需要使用 1.4 到 1.6+ 的版本,则需要扩展 Project 类来公开这些方法,然后使用您自己的 Project 类。

属性

就像在任何其他 Ant 构建文件中一样,您可以定义属性或将属性文件导入到此构建文件中。但可能存在这样的情况,即您希望以编程方式提供这些属性,或覆盖构建文件中的值。编辑 build.xml 文件并将 Hello World 替换为 Hello ${name}。正是这个语法告诉 Ant 在运行时执行变量替换。保存文件。

如果再次运行您的程序 (Run => Run Last Launched),您将看到该程序输出“Hello ${name}”,因为尚未设置此变量“name”的值。在 AntSample.java 中,在创建此 Project 对象的位置的下面添加以下行:

p.setProperty("name", "Bob");


保存文件。现在再次运行 AntSample (Run => Run Last Launched)。您应看到如下输出:

test:
     [echo] Hello Bob
BUILD SUCCESSFUL
Total time: 1 second


您甚至可以在回显任务之前将行 <property name="name" value="Sally" /> 添加到 build.xml 文件中,但这不会产生任何变化。以编程方式设置的属性将始终覆盖在构建文件中设置的属性。

回页首

结束语

既然您掌握了基础知识,那么学习更多知识的最好方法就是亲自实践 Ant javadoc 以展开您所做的工作。遗憾的是,Ant javadoc 不是 Application Developer 的一部分,并且不能用于在 Apache Ant 网站上进行在线浏览。这将确保您正在查看与您的 Ant 版本相匹配的 Javadoc。为了获得这些 Javadoc,您需要从 http://archive.apache.org/dist/ant/binaries/ 下载 Apache Ant V1.5.3(Application Developer 5.1.2 附带的版本)。之后,将这些 Javadoc 存放在 ANT_HOME\docs\manual\api 中。如果希望使用比 Application Developer 5.1.2 所附带的版本更新的 Ant 版本,请搜索 Application Developer 帮助以找到“升级 Ant”(Upgrading Ant) 或“使用不同版本的 Ant”(Using a Different Version of Ant)。

参考资料

    * 您可以参阅本文在 developerWorks 全球站点上的 英文原文。

    * Apache Ant 网站是提供关于 Apache Ant 的文档以及获得 Ant 的更新版本的最佳资源。

    * 文章 Java Software Automation with Jakarta Ant(OnJava,2002 年 8 月)现已过时,但是如果您正在使用 Ant 的旧版本,那么这篇文章可能有用。

    * 通过参与 developerWorks blogs 加入到 developerWorks 社区。

    * 购买打折的 WebSphere 书籍。

    * 查找关于 WebSphere Studio Application Developer 的更多信息。

关于作者

Nell Gawor 在北卡莱罗纳州的三角研究工业园 (Research Triangle Park) 工作,她是 IBM Software Group System House Advanced Technology Group 的一名助理软件工程师。她获得了伊利诺大学香槟分校 (University of Illinois at Urbana-Champaign) 的计算机科学硕士学位。您可以通过 ngawor@us.ibm.com与她联系。

建议
分享到:
评论

相关推荐

    Apache Ant 使用指南

    Ant以其灵活性和可扩展性而闻名,它的核心概念是基于XML的构建文件(build.xml),在这个文件中定义了一系列的任务(tasks)来驱动构建过程。 在"Apache Ant 使用指南"这本书中,你可能会学习到以下关键知识点: 1...

    java编程式启动ant

    Java编程式启动Ant是一种在Java程序中调用Apache Ant工具执行构建任务的方法。Apache Ant是一个基于Java的任务驱动的构建系统,常用于自动化Java项目的编译、打包、测试等任务。以下将详细介绍如何通过Java代码来...

    Java调用Ant API用法收集

    此外,Ant还提供了强大的API,允许开发者通过编程方式直接控制构建过程中的各项操作。 #### 二、创建目录 为了演示如何使用Ant的API执行文件系统操作,我们首先来看看如何使用Java调用Ant API来创建一个目录: ``...

    apache-ant

    这个工具的名字"Ant"来源于它的工作方式——像勤劳的蚂蚁一样,遵循预定义的规则,执行一系列有序的任务来完成整体的构建过程。 Ant的核心概念是构建文件(build.xml),这是一个XML文档,其中定义了项目的目标、...

    ant-apache-bsf-1.6.4.jar.zip

    Apache Ant,一个由Java编写的开源构建工具,以其灵活性和强大的功能,在Java开发领域扮演着重要角色。它允许开发者通过XML定义任务来构建项目,使得构建过程可配置且易于维护。在Ant中,Apache BSF(Bean Scripting...

    java编程宝贝之ant大神

    Ant以其灵活性、可配置性和自动化能力,使得项目构建过程变得高效且易于管理。Ant是Apache软件基金会的一个项目,因此它开源且免费,这使得它在全球范围内得到了广泛的应用。 Ant的主要功能在于编译源代码、创建JAR...

    java代码调用ant执行类

    在Java编程中,有时我们需要在代码中执行Ant任务,这通常是由于项目构建或者自动化测试的需求。Ant是一个由Apache软件基金会开发的Java库和命令行工具,它的设计目标是驱动Java项目构建过程。它通过XML定义的构建...

    maven ant thrift0.9.0

    它允许开发者定义服务接口,生成在多种编程语言中使用的代码,以实现高效的、轻量级的RPC(远程过程调用)机制。Thrift处理服务端和客户端之间的序列化、网络通信以及服务接口的定义。Thrift-0.9.0.tar.gz文件包含的...

    ant-robotframework-0.1.jar.zip

    标题“ant-robotframework-0.1.jar.zip”所指的是一个使用了Apache Ant工具与Robot Framework集成的特定版本(0.1)的压缩文件。这个文件的扩展名是.zip,表明它是一个压缩包,里面包含了多个文件。让我们深入探讨...

    ant.jar,ant-junit.jar,ant-launcher.jar,ant-trax.jar

    Ant以其XML为基础的构建文件(通常命名为build.xml)为特点,允许开发者定义和执行项目的构建任务。现在,让我们深入探讨一下标题和描述中提到的四个核心组件:ant.jar,ant-junit.jar,ant-launcher.jar,以及ant-...

    ant-apache-bcel-1.6.4.jar.zip

    《Ant Apache BCEL 1.6.4:Java字节码操作库的深入解析》 在Java开发领域,Ant是一个广泛使用的自动化构建工具,而Apache BCEL(Byte Code Engineering Library)则是Ant的一个重要扩展,提供了对Java字节码的生成...

    ant-netrexx.jar.zip

    总之,"ant-netrexx.jar.zip"是一个包含Apache Ant扩展的压缩包,专门针对NetRexx编程语言,提供了在Java平台上处理NetRexx源代码的能力。这个压缩包里的"ant.license.txt"文件确保了用户对Ant组件的使用符合开源...

    ant-apache-bcel-1.6.3.jar.zip

    此外,BCEL还可以用于创建Java代理,允许你在运行时动态插入方法调用,这对于AOP(面向切面编程)和日志记录等场景十分有用。 总结起来,"ant-apache-bcel-1.6.3.jar.zip"这个压缩包是Java开发者的重要工具,它整合...

    ant+video.rar

    Ant 是基于XML的,它使用XML文件(通常称为build.xml)来定义任务和依赖关系,使得开发者能够以声明式的方式配置构建过程。 【描述】中的“Ant 在开源软件包和企业里面得到了广泛的应用”说明了Ant在实际开发中的...

    ant-1.7.1.zip

    在处理Apache Ant 1.7.1的`ant-1.7.1.jar`文件时,可能是因为Ant在构建过程中生成的文件或目录名包含中文字符,因此需要确保正确设置编码以避免乱码问题。在Ant的构建脚本(build.xml)中,可以通过配置`&lt;zip&gt;`任务...

    ant-swing.jar.zip

    Ant以其XML为基础的构建文件(build.xml)而著名,它定义了构建任务和依赖关系,使得自动化构建过程变得简单且可配置。Ant的核心概念是任务(task),每个任务都可以执行特定的操作,如编译代码、打包JAR、运行测试等...

    ant-copyfilelist.jar.zip

    开发人员在进行Java项目构建时,可以通过解压这个ZIP文件,将"ant-copyfilelist.jar"添加到他们的Ant构建路径中,然后在XML构建脚本中调用相应的Ant任务,以利用这些额外的文件处理能力。同时,"ant.license.txt...

    Java编写的Ant,实现了上传下载功能

    JavaAnts是一个基于Java编程语言实现的工具,利用Apache Ant技术构建,专注于文件的上传和下载功能。Apache Ant是一个开源的构建工具,它被广泛应用于Java项目中,以替代传统的Makefile,提供更加灵活和跨平台的项目...

    findbugs与ant结合

    FindBugs 和 Apache Ant 都是Java开发中常用的工具,前者是用于检测代码质量问题的静态分析工具,后者则是一个构建自动化工具。本文将详细介绍如何将 FindBugs 与 Ant 结合,以生成 HTML 报告,帮助开发者更好地理解...

Global site tag (gtag.js) - Google Analytics