近期做的项目中一直是在使用maven。可是要知道最早出来的构建工具是Ant,如今Ant依旧有好多人再用。于是自己就抽出来时间。学习了一下Ant的主要的使用。这样也能跟好的理解Maven提供的新特性。
首先说一下他们各自的作用:
Ant的作用:是一种基于Java的build工具
- 能够用ant编译java类。生成class文件
- ant能够自己定义标签、配置文件,用于构建。
- ant能够把相关层构建成jar包 。
- ant把整个项目生成web包。并公布到Tomcat
Ant的长处:
- 跨平台性:Ant是纯Java语言编写的,因此具有非常好的跨平台性。
- 操作简单:Ant是由一个内置任务和可选任务组成的。Ant执行时须要一个XML文件(构建文件)。
- Ant通过调用target树,就能够运行各种task:每一个task实现了特定接口对象。因为Ant构建文件时XML格式的文件。所以非常easy维护和书写,并且结构非常清晰。
- Ant能够集成到开发环境中:因为Ant的跨平台性和操作简单的特点。它非常easy集成到一些开发环境中去。
Maven的作用: 除了以程序构建能力为特色之外,还提供高级项目管理工具。
Maven除了具备Ant的功能外。还添加了下面基本的功能:
- 使用Project Object Model来对软件项目管理。
- 内置了很多其它的隐式规则,使得构建文件更加简单。
- 内置依赖管理和Repository来实现依赖的管理和统一存储;
- 内置了软件构建的生命周期;
Maven的长处:
- 拥有约定,知道你的代码在哪里,放到哪里去
- 拥有一个生命周期,比如运行 mvn install就能够自己主动运行编译,測试。打包等构建过程
- 仅仅须要定义一个pom.xml,然后把源代码放到默认的文件夹,Maven帮你处理其它事情
- 拥有依赖管理。仓库管理
总体的比較:
Ant将提供了非常多能够重用的task,比如 copy, move, delete以及junit单元測试Maven则提供了非常多能够重用的过程。
我们能够把 Maven看成是一个"build container"这个容器能够让我们重用从一系列的项目中抽像出来的build过程。
使用过Ant的朋友都会有这种体会吧。Ant提供的task级别描写叙述,我们能够通过想写shell一样一个Java项目的build过程来进行描写叙述。我们能够写好一个build.xml文件,来解决我们在Java程序执行编译过程中须要解决的classpath,以及相关參数的配置问题。仅仅有是项目中的主要结构以及依赖的库不变,我们非常少去改动build.xml。可是假设我们要开发一个新的项目即使原有项目的build.xml写的即使再好,其能够复用得模块还是比較少的。特别是对项目的结构进行改动后,想不改动build.xml都非常困难。这是由于Ant所提供的可重用的task粒度太小。尽管灵活性非常强。可是我们须要纠缠非常多细节的东西。
正如你所在使用Servlet容器时,并没有告诉它怎样去解包WAR文件。在你使用Maven时,你也不须要告诉Maven怎样build你的项目。Maven提供了一套抽象层用来分离项目的build逻辑。很多人一開始就被Maven所提供的依赖管理(能够通过XML来描写叙述项目所依赖的库的关系)打动。可是使用Maven的主要优点还是它能为提供一个标准的开发构架用来对多个项目进行管理。依赖管理仅仅是这个标准开发构架所提供的一个副产品。
假设想让Maven实现某个build过程,比如compile, test, install,我们能够通过写plugin的方式,非常easy就实现build过程的复用。Maven能够为我们提供一个非常舒适的build环境,我们不须要通过build.xml定义繁琐的build过程,仅仅须要告诉这些build过程的plugin,我如今的文件依赖的那些第三方库,我须要实现什么样的build功能,就足够了。那些繁琐的路径配置信息,以及复杂的第三方库下载设置,你通通不用考虑, Maven 以及它的plugin都帮你实现了。