初见Maven
目录
1. 什么是Maven
Maven是一个项目管理工具,它包含了一个项目对象模型(POM),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(DMS),和用来定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
1.1 Maven 能解决什么问题
-
我们需要引用各种jar包,尤其是比较大的工程,引用的jar包往往有几十个乃至上百个,每用到一种jar包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的jar包冲突,版本冲突。
-
我们辛辛苦苦写好了Java文件,可是只懂0和1的白痴电脑却完全读不懂,需要将它编译成二进制字节码。好歹现在这项工作可以由各种集成开发工具帮我们完成,Eclipse、IDEA 等都可以将代码即时编译。当然,如果你嫌生命漫长,何不铺张,也可以用记事本来敲代码,然后用javac命令一个个地去编译。
-
世界上没有不存在 bug的代码,计算机喜欢 bug就和人们总是喜欢美女帅哥一样。为了追求美为了减少bug,因此写完了代码,我们还要写一些单元测试,然后一个个的运行来检验代码质量。
-
再优雅的代码也是要出来卖的。我们后面还需要把代码与各种配置文件、资源整合到一起,定型打包,如果是web项目,还需要将之发布到服务器,供人蹂躏。
1.2 Maven依赖管理
依赖管理就是maven工程对jar包的管理过程,相较于传统的web项目来说:
- 传统的web项目,jar包就保存在项目中的lib中。
- 使用maven开发的web项目中,jar包不在项目中,保存在maven的jar包仓库。jar包坐标保存在pom.xml中,通过该配置文件来找到对应的jar包供开发者使用。
1.3 项目的一键构建
- 什么是构建?
指的是项目从编译、测试、运行、打包、安装、部署整个过程都交给maven进行管理。 - 什么是一键构建?
指的是整个构建过程,使用maven一个命令可以轻松完成整个工作。
2.Maven的安装及使用
2.1 Maven的安装
- 百度搜索maven的官网
- Download中选择zip下载
- 解压至文件夹即可(文件夹名无中文无空格)
在解压后的maven文件夹中:
- bin目录中,保留着maven命令,主要用于构建项目。
- boot目录中,自身运行需要的类加载器。
- conf目录中,settings.xml是maven的主配置文件。
- lib目录中,保存着maven自身运行所需要的jar包。
-
对maven进行简单的配置
在windows中配置环境变量,新建MAVEN_HOME,添加到path中即可。
注意:Maven运行需要依赖java。 -
使用mvn -v 测试是否配置成功
2.1.2 Maven仓库的种类
- 本地仓库:在maven的conf中的settings.xml中,52行存在一条配置
Default:${user.home}/.m2/repository
,安装完成maven后默认仓库创建在当前用户的home目录中。
这个时候可以通过53行的这条配置<localRepository>/path/to/local/repo</localRepository>
,在该标签内填写指定的路径即可。 - 中央仓库:是由 Maven 社区提供的仓库,其中包含了大量常用的库。这个仓库不需要配置,需要网络才能访问。
- 远程仓库(私服):在开发项目的过程中,由开发人员定制的仓库,可以本地上传文件至该库中。
2.1.3 Maven依赖搜索顺序
当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库:
- 在本地仓库中搜索,如果找不到,执行2,如果找到了则执行其他操作。
- 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行4,如果找到了则下载到本地仓库中以备将来引用。
- 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
- 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库以备将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。
2.2 Maven项目标准目录结构
- Maven的java工程目录结构:
- src
- main
- java (核心代码)
- resources (配置文件)
- test
- java (测试代码)
- resources (测试配置文件)
- main
- Maven的web工程目录结构:
- src
- main
- java (核心代码)
- webapp (页面资源,js,css,图片等等)
- main
2.3 Maven的常用命令
- mvn complie
在cmd中运行这条命令会在项目的目录中创建target目录,该目录的目录结构和项目的目录结构一致,main目录中的java文件会被编译成class文件。 - mvn clean
在cmd中运行这条命令会在项目的目录中删除target目录,使用场景多用于导入项目的时候,由于每个人的环境不同,所以先删除导入的项目中编译的文件,再重新创建。 - mvn test
在cmd中运行这条命令会在项目的目录中创建target目录,该命令不仅会编译test目录下的代码,也会编译main中的代码。 - mvn package
在cmd中运行这条命令会在项目的目录中创建target目录,该命令不仅会编译test目录下的代码,也会编译main中的代码,并在target目录中创建项目的打包文件,格式为war(在项目的pom.xml文件中<packaging></packaging>
标签指定war)。 - mvn install
该命令在mvn package命令的基础上,会在本地仓库建立该项目的jar包。