Apache Ant 前端:ProjectHelper

什么是 ProjectHelper?

Apache Ant 中的 ProjectHelper 负责解析构建文件并创建表示构建工作流的 Java 实例。它还指示它可以解析哪种类型的文件,以及它期望作为默认输入文件的哪个文件名。

Ant 的默认 ProjectHelper (org.apache.tools.ant.helper.ProjectHelper2) 解析通常的 build.xml 文件。如果命令行上没有指定构建文件,它将期望找到一个名为 build.xml 的文件。

这种抽象的直接好处是,可以使 Ant 理解除 XML 之外的其他类型的描述性语言。一些实验已经围绕纯 Java 前端和 Groovy 前端进行(有关这些的更多信息,请咨询开发人员邮件列表)。

从 Ant 1.8.2 开始import 任务也将尝试使用适当的助手来解析导入的文件。因此,可以使用不同的语言编写不同的构建文件,并让它们相互导入。

Ant 如何选择合适的 ProjectHelper

Ant 了解 ProjectHelper 的几种实现,并且必须决定对每个构建文件使用哪一种。

在启动时,Ant 列出所有找到的实现,并将它们按在内部“存储库”中找到的顺序保存。

如果在尝试实例化 ProjectHelper 时出现错误,Ant 将记录错误,但不会停止。如果您希望获得有关 ProjectHelper 内部“存储库”的更多调试信息,请使用系统属性 ant.project-helper-repo.debug 并将其设置为 true;然后将打印完整的堆栈跟踪。

当 Ant 预计解析文件时,它将要求 ProjectHelper 存储库找到能够解析输入文件的实现。实际上,它只会遍历有序列表,第一个对 supportsBuildFile(File buildFile) 返回 true 的实现将被选中。

当 Ant 启动并且没有指定输入文件时,它将搜索默认输入文件。它将遍历 ProjectHelper 列表,并选择第一个期望实际存在的默认文件的助手。

编写自己的 ProjectHelper

org.apache.tools.ant.ProjectHelper 是预期要实现的 API。因此,通过扩展该抽象类来编写自己的 ProjectHelper。然后,您需要至少实现函数 parse(Project project, Object source)。还要注意,您的实现将由 Ant 实例化,并且它期望一个没有参数的默认构造函数。

有一些函数可以帮助您定义助手的功能以及它的期望

现在您已经准备好实现,您需要将其声明给 Ant。这里有三种解决方案