Apache Ant和Apache Maven的区别
———摘自《maven权威指南》
Apache Ant
1、Ant 是程序化的,你必须明确的告诉 Ant 做什么,什么时候做。你必须告诉它去编译,然后复制,然后压缩。
2、Ant 没有生命周期,你必须定义目标和目标之间的依赖。你必须手工为每个目标附上一个任务序列。
Apache Maven
1、Maven 拥有约定,因为你遵循了约定,它已经知道你的源代码在哪里。它把字节码放到 target/classes,然后在 target生成一个 JAR 文件。
2、Maven 是声明式的。你需要做的只是创建一个 pom.xml 文件然后将源代码放到默认的目录。Maven 会帮你处理其它的事情。
3、Maven 有一个生命周期,当你运行 mvn install的时候被调用。这条命令告诉 Maven
执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven
运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。
执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven
运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。
Maven
以插件的形式为一些一般的项目任务提供了内置的智能。如果你想要编写运行单元测试,你需要做的只是编写测试然后放到/usr/local/hudson
/hudson-home/jobs/maven-guide-zh-to-production/workspace/content-zh/src
/test/java,添加一个对于 TestNG 或者 JUnit 的测试范围依赖,然后运行 mvn test。
以插件的形式为一些一般的项目任务提供了内置的智能。如果你想要编写运行单元测试,你需要做的只是编写测试然后放到/usr/local/hudson
/hudson-home/jobs/maven-guide-zh-to-production/workspace/content-zh/src
/test/java,添加一个对于 TestNG 或者 JUnit 的测试范围依赖,然后运行 mvn test。
如果你想要部署一个web 应用而非 JAR ,你需要做的是改变你的项目类型为 war ,然后把你文档根目录置为
/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production
/workspace/content-zh/src/main/webapp。当然,你可以用 Ant
做这些事情,但是你将需要从零开始写这些指令。使用 Ant ,你首先需要确定 JUnit JAR 文件应该放在哪里,然后你需要创建一个包含这个
JUnit JAR 文件的 classpath
,然后告诉 Ant 它应该从哪里去找测试源代码,编写一个目标来编译测试源代码为字节码,使用 JUnit 来执行单元测试。没有诸如
antlibs 和 lvy 等技术的支持(即使有了这些支持技术),Ant 给人感觉是自定义的程序化构建。
/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production
/workspace/content-zh/src/main/webapp。当然,你可以用 Ant
做这些事情,但是你将需要从零开始写这些指令。使用 Ant ,你首先需要确定 JUnit JAR 文件应该放在哪里,然后你需要创建一个包含这个
JUnit JAR 文件的 classpath
,然后告诉 Ant 它应该从哪里去找测试源代码,编写一个目标来编译测试源代码为字节码,使用 JUnit 来执行单元测试。没有诸如
antlibs 和 lvy 等技术的支持(即使有了这些支持技术),Ant 给人感觉是自定义的程序化构建。
项目中一组高效的坚持约定的 Maven POM ,相对于 Ant 的配置文件,只有很少的 XML 。
Maven 的另一个优点是它依靠广泛公用的 Maven 插件。所有人使用 Maven Surefire 插件来运行单元测试,如果有人添加了一些针对新的测试框架的支持,你可以仅仅通过在你项目的 POM 中升级某个特定插件的版本来获得新的功能。
使用 Maven 还是 Ant 的决定不是非此即彼的,Ant
在复杂的构建中还有它的位置。如果你目前的构建包含一些高度自定义的过程,或者你已经写了一些 Ant
脚本通过一种明确的方法完成一个明确的过程,而这种过程不适合 Maven 标准,你仍然可以在Maven 中用这些脚本。作为一个 Maven
的核心插件, Ant 还是可用的。自定义的插件可以用 Ant 来实现,Maven 项目可以配置成在生命周期中运行 Ant 的脚本。
在复杂的构建中还有它的位置。如果你目前的构建包含一些高度自定义的过程,或者你已经写了一些 Ant
脚本通过一种明确的方法完成一个明确的过程,而这种过程不适合 Maven 标准,你仍然可以在Maven 中用这些脚本。作为一个 Maven
的核心插件, Ant 还是可用的。自定义的插件可以用 Ant 来实现,Maven 项目可以配置成在生命周期中运行 Ant 的脚本。