我最近开始使用Gradle作为构建系统。Gradle与Ant和Maven等公司的第一个比较是,Ant是命令式构建系统,而Maven是声明式构建系统。而Gradle是一个声明性构建系统,没有Maven强制执行的刚性。
当谈到构建系统时,我想更好地理解这些术语声明性和命令性
简言之,蚂蚁脚本告诉蚂蚁工具该做什么-"编译这些文件,然后将它们复制到该文件夹。然后获取该文件夹的内容并创建存档。"
虽然一个专家pom
声明了我们希望得到的结果——"以下是项目所依赖的库的名称,我们希望生成一个web存档"。Maven知道如何获取库,以及在哪里可以自己找到源类。
蚂蚁给了你更多的灵活性,同时也迫使你不断地重新发明轮子。
另一方面,Maven需要较少的配置,但可能会感到过于约束,尤其是当您习惯于不同的工作流时。
EDIT:ant maven比较的一个重要方面是maven有一个约定,描述文件应该放在哪里,依赖关系在哪里,结果工件放在哪里。而ant没有。
所以你可以考虑像坐公共汽车一样使用maven——你可以选择进入的站点和离开的站点。使用蚂蚁就像开车一样——你必须自己动手。你不必告诉公交车司机该做什么,但车站可能离你想去的地方太远了。
第2版:"重塑车轮"的比喻似乎没有我希望的那么清晰。这就是我的意思:
如果没有合理的默认值/约定,您必须为每个项目明确定义项目结构和构建生命周期,这通常是一个品味和意见的问题。由于团队和公司之间的偏好各不相同,因此构建过程也是如此。这需要新的项目成员和以后的维护人员付出更多的认知努力。根据开发人员的经验和专业知识,最终解决方案可能很难扩展和使用。
正如我在下面的评论中所说,虽然存在ant构建的最佳实践,但它们仍然必须为每个项目实现,或者从一个项目复制粘贴到另一个项目,而不是成为构建工具本身的开箱即用的默认设置。
就我的口味而言,Maven在权衡的另一边有点太过分了。更改默认值并不像它可能和应该的那样容易。