Ant和Maven之间的差异

时间:2009-03-02 17:27:58

标签: java maven-2 ant build-management

有人可以告诉我Ant和Maven之间的区别吗?我也没用过。我知道他们习惯于自动构建Java项目,但我不知道从哪里开始。

9 个答案:

答案 0 :(得分:216)

答案 1 :(得分:112)

答案 2 :(得分:20)

Ant主要是构建工具。

Maven是一个项目和依赖项管理工具(当然也可以构建您的项目)。

如果你想避免使用Maven,

Ant + Ivy是一个非常好的组合。

答案 3 :(得分:17)

Maven or Ant?与此问题非常类似,可以帮助您回答问题。

What is Maven?在官方网站上。

编辑:对于新的/绿地项目,我建议使用Maven:“约定优于配置”将为您节省大量的时间来编写和设置构建和部署脚本。当您使用ant时,构建脚本的长度和复杂性会随着时间的推移而增长。对于现有项目,可能很难将其配置/布局塞进Maven系统。

答案 4 :(得分:16)

仅列出更多差异:

  • Ant没有正式的约定。你必须告诉Ant到哪里找到源,输出的位置等等。
  • Ant是程序性的。你必须告诉Ant究竟要做什么;告诉它编译,复制,然后压缩等。
  • Ant没有生命周期。
  • Maven使用约定。只要您遵循这些约定,它就会自动知道源代码的位置。你不需要告诉Maven它在哪里。
  • Maven是声明性的;您所要做的就是创建一个pom.xml文件并将您的源代码放在默认目录中。 Maven将负责其余部分。
  • Maven有一个生命周期。您只需调用 mvn install ,即可执行一系列序列步骤。
  • Maven拥有关于常见项目任务的情报。要运行测试,只需执行 mvn test ,只要文件位于默认位置即可。在Ant中,你首先必须要JUnit JAR文件,然后创建一个包含JUnit JAR的类路径,然后告诉Ant它应该在哪里寻找测试源代码,编写一个编译测试源的目标然后最终执行单元测试与JUnit。

<强>更新

这来自Maven: The Definitive Guide。对不起,我完全忘了引用它。

答案 5 :(得分:14)

Maven既是一个依赖管理工具 - 它可以用来从中央存储库或你设置的存储库中检索jar,也可以用作声明性构建工具。 “声明式”构建工具与更传统的构建工具(如ant或make)之间的区别在于您配置需要完成的工作,而不是如何完成。例如,您可以在maven脚本中说项目应该打包为WAR文件,maven知道如何处理它。

Maven依赖于有关如何布置项目目录以实现其“声明性”的约定。例如,它有一个约定,用于放置主代码的位置,放置web.xml的位置,单元测试等等,但如果需要,还可以更改它们。

您还应该记住,有一个插件可以在maven中运行ant命令:

http://maven.apache.org/plugins/maven-ant-plugin/

此外,maven的原型使得项目开始非常快。例如,有一个Wicket原型,它提供了一个maven命令,您可以运行该命令来获得一个完整的,可立即运行的hello world类型项目。

https://wicket.apache.org/start/quickstart.html

答案 6 :(得分:10)

我可以带一个从未见过Ant的人 - 它的build.xml写得相当合理 - 他们可以理解发生了什么。我可以接受同一个人并向他们展示一个Maven POM,他们不会知道发生了什么。

在一个庞大的工程组织中,人们写到Ant文件变得庞大且难以管理。我写了那些类型的干净的Ant脚本。它真正了解您需要做的事情,并设计一组模板,以响应变化并在3年以上的时间内扩展。

除非你有一个简单的项目,否则学习Maven约定和Maven关于完成任务的方法是相当多的工作。

在一天结束时,您不能将Ant或Maven的项目启动视为一个因素:它实际上是总拥有成本。组织在几年内维护和扩展其构建系统所需的是必须考虑的主要因素之一。

构建系统最重要的方面是依赖关系管理和表达构建方法的灵活性。如果做得好,它必须有点直观。

答案 7 :(得分:6)

我会说这取决于你的项目的大小......个人而言,我会将Maven用于需要直接编译,打包和部署的简单项目。一旦你需要做一些更复杂的事情(许多依赖项,创建映射文件......),我会切换到Ant ......

答案 8 :(得分:4)

Maven还拥有一个常用的开源项目的大型存储库。在构建期间,Maven可以为您下载这些依赖项(以及依赖项依赖项:)),使构建项目的这一部分更易于管理。