Maven vs Ant就像IntelliJ vs Eclipse, SWT vs Swing 和 Spring vs EJB,算是一种"半信仰"话题。这两种工具都挺有趣,所以取舍就看你的需求了。Ant只是一个framework,或者说不是一种即存即用(out of the box)的build-DSL。使用者必须利用已有的Ant-task来编写build脚本。Ant task不会事先假设任何的默认的规范和配置,因此工程的所有文件布局都是你自己的工作。你对所有的东西都有完全的控制权--当工程规模变得一大问题就来了。
Maven可以被看作使用默认规范优先配置的Ant("Ant With Convention Over Configuration")。事实上,如果你利用像"标准路径布局"的默认规范,Maven不需要改动任何东西和配置就能动起来。你需要的只是在第一次build的时候能成功连接上internet:-)
在使用每个默认规范优先配置(Convention Over Configuration)的框架的时候,你必须对默认规范有很好的理解。万一你的工程不符合默认规范,那你就不得不重新整理你的工程,这绝对是很复杂的工作。
Maven的一大优势就是它的依赖管理(dependency management)。你只需要声明需要的依赖包,然后Maven会自己下载这些包,自动设置classpath,甚至自动部署这些依赖包。Maven不只是能管理直接的依赖的依赖包,而且还能管理传递依赖的依赖包。这点绝对是Maven的优势。Ant没有这样能即存即用(除非使用Ivy)的功能,使用Ant的话必须做大量的工作来达到Maven的依赖管理功能。
Maven和Ant我都用过,取舍取决于你的需求。在以下情况下Maven就具有优势:
1. 很多有"创造力"的开发者参与开发。如果没有工具的帮助,就很难建立一个统一的工程结构。
2. 开发者固执于自己的IDE,他们可能同时各自使用IntelliJ, NetBeans和Eclipse。
3. 管理"产品级"(product-like)工程。你必须在不同的version和branch下面管理各自的依赖。
4. 工程由若干个团队来开发不同的模块。各个模块定期来组合成应用。
5. 使用checkstyle,pmd以及创建工程网站等等。用Maven很容易来做这些工作。
但从其他角度来说,我会选择Ant:
1. 需要在几个月甚至几个礼拜之内快速开发的特别的软件。
2. 需要很特别的外部依赖包的工程。这样工程不需要很细的依赖管理。
3. 使用NetBeans的项目:-) 这类项目有事先的Ant脚本定义,他们甚至可以和Hudson完美结合来工作。你要做的只是把所有东西check in到SVN,然后让Hudson来check out...
4. 不能很好符合Maven默认规范的遗留项目。不符合Maven默认规范的情况的确让人头痛。
5. 没有明确需要模块化的项目。需要的只有很少量的部署的文件。
从我的经验来说,这几年使用Maven和Ant的比率差不多50%-50%。对于些不确定的项目,由于效率和可预测性的关系我会使用Ant。尽管这样的情况很少。
原文:http://java.dzone.com/news/maven-or-ant by Adam Bien
译者评论:
在我的开发经验来说几乎都是使用Ant,对于Maven的兴趣只是想看看有什么比Ant更厉害的build工具:) 毕竟Ant已经相当强了,从编译到测试到文件操作几乎都可以胜任。在看了Maven之后发现它的核心理念在于"Convention Over Configuration"以及"Project Object Model, POM"。这真的很cool。如果要我搞一个和Ant比肩的build工具,我真的想不到有如此的想法。这就是创新!从某个角度来说Convention 就是一个标准的Configuration。很多时候在设计软件的时候,大家都会问"你这个设计够不够灵活?在A情况下可以处理吗?在B情况下可以处理吗?"...这个时候也许我们可以从"Convention Over Configuration"来考虑问题。