你如何“重构”ant build.xml文件?

14

我正在开发一个使用ant和cpptasks构建的大型C++系统。虽然它运行得足够好,但由于添加新库或可执行目标的标准操作程序是复制和粘贴另一个库/可执行文件的规则(这些规则已经相当庞大),因此build.xml文件变得难以控制。如果这是“正确的代码”,那么它肯定需要重构,但作为一个ant新手(更习惯于make或VisualStudio解决方案),我不确定有哪些选项。

ant用户在防止ant构建文件过于臃肿方面有最佳实践吗?

一个明显的选择是通过XSLT生成build.xml,为常见的重复模式定义自己的标签。有人这样做吗,还是有更好的方式?

5个回答

13

2
链接已经失效。修复后的链接为:http://ant.apache.org/manual/Tasks/macrodef.html 和 http://ant.apache.org/manual/Tasks/import.html 以及 http://ant.apache.org/manual/Tasks/subant.html。 - Hendrik Brummermann

5
如果规则是重复的,那么你可以使用macrodef将它们分解成一个ant宏,然后重复使用该宏。
如果文件的大小过大而无法管理,那么你可以将其拆分为较小的文件,并让主build.xml在这些文件中调用目标。
如果以上两种情况都不是,那么你可以考虑使用构建系统。尽管我自己没有使用过Maven,但听说它可以解决许多大型且难以管理的构建文件的问题。

3
通常,如果您的构建文件很大且复杂,则清楚地表明您代码的布局方式(即文件夹和包)过于复杂。我发现一个复杂的Ant脚本是代码库布局不良的明显迹象。
要解决这个问题,请考虑您的代码布局。您有多少项目?这些项目是否知道如何使用主构建脚本自身构建,该脚本知道如何将各个项目/应用程序/组件捆绑在一起形成更大的整体?
当您重构代码时,您正在寻找以使事物易于理解的方式进行拆分-较小的方法、较小的类、执行单个操作的方法和类。您还需要将这些原则应用于您的代码库中。
创建功能上相互关联且与其余代码非常松散耦合的较小组件。使用构建脚本将该组件构建为库。对于您的其他代码也要这样做。现在创建一个主构建脚本,它知道如何捆绑所有库并将它们构建为应用程序。如果您有几个应用程序,则为每个应用程序创建构建脚本和一个主脚本,该主脚本知道如何将应用程序捆绑到可发布的软件包中。
通过查看构建脚本,您应该能够看到并了解您代码库的布局和结构。如果它们/它不干净且难以理解,则源代码也是如此。

3

使用Antlib文件。这是一种非常干净的方式,可以:

  1. 删除复制/粘贴的代码
  2. 定义默认值

如果您想看一个例子,可以查看我为我的沙盒项目编写的一些构建脚本


antlib是一个非常可重用的库,+1 - dfa

1

我会推荐使用Ant-Ivy-敏捷依赖管理工具。我们最近开始在一些更复杂的系统中使用它,效果非常好。这里的优势是您不需要承担Maven的额外开销和迁移成本(它使用Ant目标,因此可以与您当前的设置一起使用)。这里有一个比较


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接