您是否曾经希望为 Apache Ant 提供一个模式(schema)?
最近,我在一个软件项目中遇到了一些与 Ant 配置文件相关的问题。我正在使用 XMLSpy 编辑其中一个配置文件,但由于我没有为脚本指定任何模式(schema),因此无法获得代码提示和自动补全功能。
这看起来像一个简单的问题,于是我开始寻找相关的模式(schema)。
我很快在 Stack Overflow 上找到一个类似的问题。答案是,Ant 没有对应的 schema 或 DTD。原因很简单:在构建一个灵活且全面的 Ant 核心模型的基础上,还能够包含所有外部任务,这本身就是一个挑战。
我立刻想起了,几年前我曾经来过这里,但这次我打算利用XMLSpy的模式生成功能,尝试解决一些问题……
如果无法采用官方的模式定义,您可以使用 XMLSpy 快速创建一个模式,以覆盖您使用的特定任务和功能。 随着您使用更多功能,向您的 XSD 模式添加内容所付出的努力非常小,但您将获得强大的编辑支持和验证帮助,这非常值得。
XMLSpy 可以根据一组 XML 文件生成模式(schema)。具体操作如下:首先,在“项目”菜单中选择“新建项目”来创建一个项目。确保“项目”窗口已打开,如果未打开,请使用“窗口”菜单打开它。然后,右键单击项目文件夹,选择“添加文件”,将您的 Ant 文件添加到该文件夹中。
![]()
在添加文件后,再次右键点击该文件夹,然后选择“生成DTD/Schema”。
![]()
我的项目包含数十个 Ant 脚本,因此我们对 Ant 的使用情况具有相当广泛的覆盖范围,这与我们正在进行的开发工作息息相关。这意味着 XMLSpy 将会看到我们使用 Ant 的各种方式,并生成一个模式,该模式能够涵盖我们迄今为止使用 Ant 所做的一切。
![]()
生成模式文件非常简单。不过,虽然 XMLSpy 在生成模型方面表现出色,但如果您输入 60 个 Ant 文件,生成的模式文件肯定会非常庞大。您可以在此截图中的“生成模式”对话框中看到我的选择。对我来说,最重要的选项是获取全局类型和少量枚举,以便更轻松地扩展模式。
![]()
在对新的XSD进行美化之前,我需要先确定我希望通过这次工作实现什么目标。
Ant 的灵活性非常高,它允许属性中包含各种类型的值,并且许多外部任务都没有命名空间。我并不追求一个完美的模式,只是希望有一个对这个项目有帮助的模式。我的目标是创建一个非常灵活的模式,以便在编辑 Ant 文件时,XMLSpy 能够提供辅助功能,从而提高工作效率。
从长远来看,我们或许会希望进一步完善它,以帮助我们编写更一致、更准确的 Ant 文件,但这属于未来的事情。但目前,我只是想做一个非常简单的概念验证。
考虑到这一点,我开始对生成的模式进行精简。XMLSpy 生成的 XSD 包含了所有情况的详尽描述。它提供了一个在技术上正确的模式,但比我想要的或需要的细节更多。然而,在 XSD 视图中,只需几分钟时间,通过拖动元素并合并不必要的分支,我就得到了一个非常简洁的模型。
第一个验证的标志是,我能够使用我简化的XSD验证所有大约60个Ant文件。在重新添加了我清理过程中意外遗漏的几个元素后,一切顺利。我右键点击我的项目文件夹,选择“验证所有”。所有文件都以大约5秒的时间批量验证通过。
![]()
第二个关键点是,在使用 XMLSpy 创建新的 Ant 文件时,我获得了上下文相关的帮助。我很快意识到,随着我们使用新的任务和功能,未来将会添加很多新的元素。例如,我发现需要在 junit 元素中添加 sysproperty 元素,因为我们之前没有使用过这个元素。
但在“模式视图”中,添加一些元素或属性非常简单,并且随着时间的推移,我们将会越来越少地需要这样做。
![]()
总的来说,对于我这样简单的需求来说,创建 Ant 脚本确实是一个小小的成功。
![]()
如果您希望将我这个非常简单的框架作为起点,来创建您自己的框架,请点击此处下载它。 并且,请告诉我它对您是否有用。