一、概述
Maven(“专家”、“内行”),是Apache的一个纯java开源项目。
Maven是一个项目管理工具,可以对java项目进行构建、依赖管理。当然,Maven也可以用于构建和管理各种项目,例如:C#、ruby等。
二、Maven项目构建功能
1.1、项目构建过程包括:
- 源代码
- 编译
- 测试
- 打包
- 部署
- 运行
1.2、传统项目构建过程:
- idea、eclipse中创建java web项目
- 在工程中编写源代码及配置文件等
- 对源代码进行编译:.java文件编译成.class文件
- 执行junit单元测试
- 将项目打成war包部署到tomcat
1.3、Maven构建项目过程:
Maven将项目构建过程标准化,每个阶段使用一个命令完成
- 清理:删除以前编译结果,为重新编译做好准备。
- 编译:将java源程序编译为字节码文件。
- 测试:针对项目中关键点进行测试,确保项目在迭代开发中关键点正确。
- 报告:在每一次测试后以标准格式记录和展示测试结果。
- 打包:将一个包含诸多文件的工程封装为一个压缩文件供安装和部署,java工程对应jar包,web工程对应war包。
- 安装:在Maven环境下特指将打包jar或者war包结果安装到本地仓库。
- 部署:将打包结果部署到远程仓库或将war包部署到服务器运行。
1.4、项目的构建方式
Ant:
Ant是一个项目构建工具,没有集成依赖管理。在构建项目时没有进行目录结构约定,需要手动指定源文件、类文件等目录地址。同时它执行task时需要显示指定依赖task,存在大量代码重复。
Maven:
Maven不仅是一个项目构建工具,更是一个项目管理工具,它在构建项目工程时,比Maven更全面、更灵活。Maven在进行项目构建时,对目录结构进行了约定。同时它拥有生命周期概念,而且是有顺序的,它在执行后面的生命周期时,不需要显示配置前面生命周期。例如:mvn install会自动执行前面的编译、测试、打包等构建过程。
Gradle:
开源的自动化构建系统,建立在Apache Ant和Maven Apache概念的基础上,并引入了基于Groovy的特定领域语言(DSL),而不是Maven的XML形式。
三、Maven依赖管理功能
3.1、什么是依赖管理
一个java项目可以需要使用一些第三方jar包才能运行,我们可以说这个java项目依赖于第三方的jar包。例如:数据源的jar包、数据库连接的jar包等。
依赖管理就是对项目所有需要的jar包进行规范化管理。
3.2、传统的依赖管理
jar包管理完全依靠人工,从网上下载jar包添加到项目中。
这样存在一些问题:
- 没有对jar包的版本进行统一管理,容易造成版本冲突。
- 从网上找jar包很不方便,有些jar还不容易找到。
- jar包添加到工程中导致工程过大。
3.3、Maven项目的依赖管理
Maven项目管理的jar包不需要手动下载jar包添加到工程中,只需要在pom.xml(Maven工程的配置文件)中添加jar包的坐标,会自动从Maven仓库中下载jar包到项目中。
使用Maven管理jar的好处:
- 通过pom.xml对项目进行统一的版本管理,避免版本冲突。
- Maven团队维护了一个非常全的Maven仓库,里面包括当前使用的jar包。Maven项目会自动从仓库中下载,很方便。
四、为什么使用Maven
- 一步构建:项目构建的过程标准化,通过一个命令即可完成项目构建过程。
- 依赖管理:不需要手动导入jar包,通过在pom.xml中定义坐标,自动在Maven仓库中下载,方便且不易出错。
- 跨平台:支持windows和linux。
- Maven遵循规范开发,有利于大型团队开发效率,降低项目的维护成本。