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 列出所有找到的实现,并将它们按在内部“存储库”中找到的顺序保存。
org.apache.tools.ant.ProjectHelper
声明的属性(请参阅 Java 系统属性);ProjectHelper
服务声明:它在类路径中搜索文件 META-INF/services/org.apache.tools.ant.ProjectHelper。此文件将只包含要实例化的 ProjectHelper
实现的完全限定名称;ProjectHelper
服务声明;ProjectHelper
,该助手可以解析经典的 build.xml 文件。如果在尝试实例化 ProjectHelper
时出现错误,Ant 将记录错误,但不会停止。如果您希望获得有关 ProjectHelper
内部“存储库”的更多调试信息,请使用系统属性 ant.project-helper-repo.debug
并将其设置为 true
;然后将打印完整的堆栈跟踪。
当 Ant 预计解析文件时,它将要求 ProjectHelper
存储库找到能够解析输入文件的实现。实际上,它只会遍历有序列表,第一个对 supportsBuildFile(File buildFile)
返回 true
的实现将被选中。
当 Ant 启动并且没有指定输入文件时,它将搜索默认输入文件。它将遍历 ProjectHelper
列表,并选择第一个期望实际存在的默认文件的助手。
类 org.apache.tools.ant.ProjectHelper
是预期要实现的 API。因此,通过扩展该抽象类来编写自己的 ProjectHelper
。然后,您需要至少实现函数 parse(Project project, Object source)
。还要注意,您的实现将由 Ant 实例化,并且它期望一个没有参数的默认构造函数。
有一些函数可以帮助您定义助手的功能以及它的期望
getDefaultBuildFile()
:定义如果未提供任何文件,则期望哪个文件名supportsBuildFile(File buildFile)
:定义您的解析器是否可以解析输入文件canParseAntlibDescriptor(URL url)
:您的实现是否能够解析给定的 Antlib 描述符。基类返回 false
parseAntlibDescriptor(Project containingProject, URL source)
:如果您的实现对上一个方法返回了 true,则调用它来实际解析 Antlib 描述符。
现在您已经准备好实现,您需要将其声明给 Ant。这里有三种解决方案
org.apache.tools.ant.ProjectHelper
(另请参阅 Java 系统属性);