一、Maven是什么,以及它有什么用途?
1. Maven是什么?
Maven是Apache的一个开源项目,是一款优秀的跨平台的构建工具,Maven是声明式的,项目构建过程和过程各个阶段所需的工作都由插件实现,并且大部分插件都是现成的。开发者只需要声明项目的基本元素,Maven就执行内置的、完整的构建过程。同时还是一个依赖管理工具和项目信息管理工具。
2. Maven用途
Maven能够标准化、以及抽象构建过程,主要服务基于Java平台的项目构建、依赖管理和项目信息管理(如项目描述、开发者列表、版本控制系统地址、许可证、缺陷管理系统地址)。它能够实现自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。
常规的项目过程:
清理——编译——测试——报告——打包——部署
传统项目构建的弊端:
- 手动拷贝jar包
- 手动清理
- 手动编译
- 手动测试
- 手动打包
- 各个节点的工作都相互独立,难以一步完成
- 每个人的IDE配置不同,容易出现本地代码换个地方编译出错
使用Maven:
- 拥有约定,知道你的代码在哪里,放到哪里去。
- 拥有一个生命周期,例如执行mvn install就可以自动执行编译、测试、打包等构建过程。
- 只需要定义一个pom.xml,然后把源代码放到默认的目录,Maven会替你处理其他事情。
- 拥有依赖管理、仓库管理。
二、Maven与其他构建工具的对比
1. 通过IDE构建
IDE依赖大量的手工操作。编译、测试、代码生成等工作都是相互独立的,很难一键完成所有工作,低效易出错,且难以在项目中统一IDE配置。
2. Make
Make是最早的构建工具,其由一个名为Makefile的脚本文件驱动,该文件使用Make自定义的语法格式。其基本组成为一系列规则(Rules),而每一条规则又包括(Target)、依赖(Prerequisite)和命令(Command)。Makefile的基本结构如下:
TARGET...: PREREQUISITE...
COMMAND
...
...
Make通过一系列目标和依赖将整个构建过程串联起来,同时利用本地命令完成每个目标的实际行为,它可以利用所有系统的本地命令(尤其是Unix/Linux),帮助其快速高效地完成任务。也正是如此,导致其不能实现跨平台特性,且Makefile的语法不友好存在较多问题,这些都是Make被淘汰的主要原因。
3. Ant
Ant最早被用来构建Tomcat,Ant可以被看做是Java版的Make,且是跨平台的。Ant使用XML构建脚本build.xml,如下所示:
<?xml version = "1.0"?>
<project name = "Hello" default = "compile">
<target name = "compile" description = "compile the java source code to class files">
<mkdir dir = "classes"/>
<javac srcdir = "." destdir = "classes"/>
</target>
<target name = "jar" depends = "compile" description = "create a Jar file">
<jar destfile = "hello.jar">
<fileset dir = "classes" includes = "* * /*.class"/>
<manifest>
<attribute name = "Main-Class" value = "HelloProgram"/>
</manifest>
</jar>
</target>
</project>
build.xml的基本结构也是目标(target)、依赖(depends),以及实现目标的任务。Ant有大量内置的用Java实现的任务,保证其跨平台的特质,同时Ant也有特殊的任务execl来执行本地命令。
但和Make一样,Ant也是过程式的,开发者显式地指定每一个目标,以及完成该目标所需要执行地任务。针对每一个项目编写这一过程会存在很大的重复劳动。且Ant没有依赖管理功能,很长一段时间都是通过手工管理依赖,而如今我们可以通过借助lvy帮助Ant管理依赖。
通过了解和对比以往的构建工具,我们对Maven的概念、用途有了清晰的认识。Maven除了能够高效构建项目、管理依赖、管理项目信息并拥有一个核心中央仓库外,还能极大地与极限编程结合,实现一些核心价值。
总结:本章节作为对Maven的一个入门简介,更多相关Maven学习内容及实战,请其他后续章节,未完待续……