40

我最近开始使用 Gradle 作为构建系统。Gradle 与 Ant 和 Maven 之类的第一个比较是,Ant 是命令式构建系统,而 Maven 是声明式构建系统。而 Gradle 是一个声明式构建系统,没有 Maven 强制执行的刚性。

在谈论构建系统时,我想更好地理解这些声明性命令性术语。

4

1 回答 1

54

简而言之,一个 ant 脚本告诉 ant 工具该做什么——“编译这些文件,然后将它们复制到那个文件夹。然后获取这个文件夹的内容并创建一个存档。”

虽然 mavenpom声明了我们希望得到的结果- “这是项目所依赖的库的名称,我们希望生成一个 Web 存档”。Maven 知道如何获取库以及在哪里可以找到它自己的源类。

虽然 ant 为您提供了更大的灵活性,但它也迫使您不断地重新发明轮子。

另一方面,Maven 需要较少的配置,但可能会感觉过于受限,特别是如果您习惯了不同的工作流程。

编辑: ant-maven 比较的一个重要方面是 maven 有一个约定,描述文件应该在哪里,在哪里找到依赖项,在哪里放置生成的工件,而 ant 没有。

因此,您可以将使用 maven 想象为乘坐公共汽车 - 您选择进入的站点和离开的站点。使用 ant 就像开车一样——你必须自己动手。您不必告诉巴士司机该做什么,但停靠站可能离您想去的地方太远。

EDIT2: “重新发明轮子”的比喻似乎没有我希望的那么清楚。这就是我的意思:

如果没有合理的默认/约定,您必须为每个项目明确定义项目结构和构建生命周期,这通常使其成为品味和意见的问题。由于团队和公司之间的偏好不同,因此构建流程也是如此。这需要新项目成员和后来的维护者付出更多的认知努力。根据开发人员的经验和专业知识,最终的解决方案可能难以扩展和使用。

正如我在下面的评论中所说,虽然存在 ant 构建的最佳实践,但它们仍然必须为每个项目实施,或者从一个项目复制粘贴到另一个项目,而不是成为构建的开箱即用默认值工具本身。

对于我的口味,Maven 在权衡的另一边有点过分了。更改默认值并不像它可以而且应该那样容易。

于 2013-02-19T10:53:44.500 回答