学习Maven,我们将按照是什么,为什么,怎么用三步骤来学习,步步惊心,发发入魂!!!
1、为什么需要Maven?
Simon是个划水的程序猿,技术不咋的,废话挺多!!!写个代码絮絮叨叨
-
哎,又得下载jar包引入到工程,不知道会不会遇到jar包冲突,
-
写好的java文件到工程部署,烦死了,步骤好多
-
代码写的好乱啊,哎,编写个单元测试吧
-
老王写的什么代码,完全不符合我的飘逸的风格,工程目录都看不懂,这让我开发个捶捶
细细数来,问题还真不少,不要担心,Maven来了,它可以帮我们解决以上所有的问题,
-
Maven的官方定义
maven是一个项目管理工具,包含了一个项目对象模型(POM Project Object Model),一组标准集合,一个项目生命周期(Project LiftCycle),一个依赖管理系统(Dependency Mainagement System),和用来运行定义在声明周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
好吧,其实Maven的功能主要是有两个
统一了开发规范
统一管理jar包(依赖管理)
这样说还是很空洞,来,让我们深入学习下!!!
2、Maven的深入学习
2.1、Maven的仓库分类及关系
maven的最强大的一点莫过于根据jar包坐标找jar包,我们只需要在工程中引入相关jar包坐标,Maven就可以帮我们找到所需的jar包下载到工程,哪么maven从哪里下载的呢?
maven主要从这三个仓库下载。
-
本地仓库:存储从远程仓库或者中央仓库下载的插件和jar包,项目中需要使用的jar优先从本地仓库中拿。
-
远程仓库:若本地仓库中没有项目中要用的jar包,则从远程仓库取。
-
中央仓库:maven中内置了一个远程仓库,这个网址就是中央仓库,服务于整个互联网,里面保存了几乎所有的jar包
-
来,看一下仓库间的关系及优先顺序。
Note:maven项目所需要的jar包会优先从本地仓库中取,若在本地仓库(本地仓库需要自己在配置文件中指定,会面的内容会讲到如何配置)中没有找到,①若是个人项目,并且电脑联网,则会从中央仓库中下载所需的jar包放入到本地仓库中。②若是公司项目,公司可能会有自己的仓库(私服),当在本地方库找不到,会转向远程仓库,若远程仓库也找不到,则会转向中央仓库
别着急,Maven还定义了一套开发规范,继续往下品!
2.2、Maven的工程目录
使用maven创建的普通java工程,其目录结构如下。
每个目录都有自己的功能,我们只需要按照它的规定开发就好了,只有这样,才是你好,我好,大家好!!!
-
src/main/java:放置编写的.java文件
-
src/main/resources:放置项目资源文件
-
src/test/java:存放所有单元测试.java文件,如Junit测试类
-
src/test/resources:测试资源文件
-
target:项目输出的位置,编译后的class文件会输出到此目录
-
pom.xml:maven项目的核心配置文件
使用maven创建Web工程,与java工程不太一样,它会在原有的目录结构中多出webapp目录
仅仅上上面的学习是不够的,我们还需了解Maven的一些常用指令,提高开发效率,来,学一波。
2.3、maven常用的指令及绑定
-
compile:maven的工程编译指令,其作用是将src/main/java下的文件编译为class文件输出到target目录下
-
test:maven工程测试命令,执行src/test/java下的单元测试类
-
clean:maven工程的清理命令,执行clean会删除target目录及内容
-
package:maven工程的打包命令,将java工程打成jar包,将web工程打成war包
-
install:maven工程的安装命令,其作用是将jar包或war包发布到本地仓库
Note:当执行任何一个指令时,maven都会将其之前指令都会执行。
你看上面的图,是不是发现指令下面有个插件包,它们是不是在上下呼应,实际上,每条指令都绑定了插件内的goal,仔细看下面的图品一品。
2.4、maven的生命周期
maven对项目的构建过程分为三套相互独立的生命周期
-
Clean LifeCycle:项目构建前的清理工作
-
Default LifeCycle:项目构建的核心部分,如编译、测试、打包、部署等。
-
Site LifeCycle:项目报告的生成、站点的发布
-
说了那么多,什么是坐标啊,对象模型又是啥,来,继续往下看
2.5、项目对象模型
项目对象模型(Project Object Model)对应是工程中的pom.xml文件,我们可以通过pom.xml文件定义项目的坐标、项目的依赖、项目信息和插件等。
2.6、依赖管理系统
-
使用maven可以对所依赖的jar包进行统一管理。如项目依赖servlet,就需要在pom.xml文件中引入相关的依赖,它就会找指定的仓库下载Jar包。
<dependencies>
<dependency>
<!--项目的名称-->
<groupId>javax.servlet</groupId>
<!--模块名称-->
<artifactId>servlet-api</artifactId>
<!--版本号-->
<version>2.5</version>
<!--依赖作用的范围-->
<scope>provided</scope>
</dependency>
</dependencies>
-
同样的,插件也在POM文件中,以mvn-clean为例
<plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin>
Note:groupId、artifactId、version这三个元素是项目的坐标,maven通过坐标找到相应的jar包
groupId:项目所在组,一般是组织或公司
artifactId:当前在组中的唯一Id
version:版本号
scope:表示依赖范围
2.7、一组标准的集合
maven将整个项目的管理过程定义了一组标准,比如,通过maven构建工程有标准的目录结构,有标准的生命周期阶段,依赖管理有标准的坐标定义。
好了,Maven的基础知识就搞得差不多了,让我们使用Maven建个工程感受一波。
3、Maven的安装与使用
3.1、Maven的安装
从官网上下载的压缩包直接解压即可,在安装maven前,要确保自己的电脑中安装了jdk。
-
maven在本地的配置
同样的,也需要在Path中进行配置
来,验证一下是否安装成功
在命令提示行中输入mvn -v,显示如下,即证明安装成功
-
在IDEA中配置maven插件
在IDEA中,依次打开Settings-->Build,Execution,Deployment-->Maven
配置maven目录及maven仓库
Note :maven home directory是maven的安装目录,选择即可,当我们选择好之后,会自动添加好用户的设置文件和本地仓库路径。
-
本地仓库的配置
本地仓库的路径默认为:${user.home}/.m2/repository
其中,本地仓库的路径是可以修改的,只需要在config/settings.xml中添加本地仓库路径即可,即localRepository
打开maven中的E:\maven\apache-maven-3.5.2\conf\settings.xml文件,修改即可
3.2、Maven在IDEA中的使用
3.2.1、使用maven构建java工程
-
采用maven骨架(maven-archetype-quickstart),也可不采用直接构建
-
填写唯一识别的坐标,GroupId、ArtifactId、Version
-
配置目录和本地仓库
-
确定项目名称
-
根据maven的标准目录结构补全项目的目录结构
建新目录-->右击--->Mark Directory as--->想要的目录类型
3.2.2、使用maven创建web工程
-
使用骨架(maven-archetype-quickstar-webapp)
剩下的操作步骤都是和构架java工程相同的
Maven的学习就到此结束了。