Maven的讲解
一、maven的基本概念和讲解
1、导读
1) 以前要想在eclipse里用Maven功能都是要额外装m2eclipse插件,但是从eclipse4.4(代号Luna,
2014年推出)开始,maven成了它的标准插件,从官网下载下来的eclipse就已经自带Maven功能
2) SpringFramework官网,不再提供Spring的jar包下载链接,而是只提供了Maven仓库配置信息。
3) 在github网站里,很多流行的框架,其源码根目录下都有一个pom.xml的文件,也就是说默认都是用
Maven来构建项目。
4) 在建行这边开发的项目,基本都是用Maven来构建,虽然开发的电脑不能联外网,但建行内部用
Nexus自己搭建了一个Maven仓库。
5) 惠普里做的项目也是用Maven构建,也是内部自建Maven仓库
小结:1> 正是因为使用maven会带来很多方便的 ,标准统一 所以我们才提倡使用maven
2> 并不是因为maven的出现就废弃原来的将原来的jar包拷贝到项目中的做法
2、什么是maven
中文意思为“知识的积累”,是Apache基金会出产的一个进行项目构建的工具,其核心
是pom.xml(pom=Project Object model 项目对象模型),定义了项目的基本信息,用于
描述项目如何构建,声明项目依赖等
与之类似的工具:Ant,gradle
PS: ***Maven是Java平台下的一款项目构建和依赖管理(统一管理jar包)的自动化管理工具
提示:
项目构建:将我们的源代码、配置文件变成可执行的war包或者jar包。
依赖管理(统一管理jar包):项目需要正常运行,必须依赖一些第三方的jar包,对于这些第三方
的jar包的管理,可以认为就是依赖的管理
3、maven的特点
1) 原来的项目中需要的jar包必须手动“复制”、”粘贴” 到WEB-INF/lib 项目下,而借助Maven,可以
将jar包仅仅保存在“仓库”中,有需要使用的工程只需要“引用”这个文件,并不需要重复复制到工程中。
2) 原来的项目中所需要的jar包都是提前下载好的,而Maven在联网状态下会自动下载所需要的jar包。
首先在本地仓库中找,找不到就在网上进行下载。
3) 原来的项目中一个jar包所依赖的其他jar包必须手动导进来,而Maven会自动将被依赖的jar包导进来。
4) 原来的项目一个项目就是一个工程,而借助Maven可以将一个项目拆分成多个工程。
二、Maven环境的配置
要是配置Maven的环境,需要先安装jdk(版本最好是1.6+)并且要配置好jdk的环境变量
maven的环境配置(安装):
1) 去官网下载maven的安装包:apache-maven-3.5.0-bin
2) 解压apache-maven-3.5.0-bin.zip,并把解压后的文件夹下的apache-maven-3.5.0-bin文件夹移动
到D:\tools下,如果没有tools这个文件夹的话,请自行创建。
3) 配置环境变量:
新建系统变量: M2_HOME
变量值: D:\tools\apache-maven-3.5.0-bin\apache-maven-3.5.0
编辑系统变量: Path
添加变量值: %M2_HOME%\bin;
4) 找出黑窗体:输入指令mvn -v若出现下图所示即为正确
三、配置Eclipse支持maven的插件
1) 打开eclipse然后点击Window-->Preferences-->Maven-->Installations,点击Add添加maven
然后Apply
2) 再点击User Settings进行设置
四、构建一个maven项目
1.创建一个maven项目:
new-->Maven Project-->maven-archetype-quickstart(这样是普通的Java项目)-->
Group Id:意思为公司名或者组织名
com.baidu.bj org.apache.uk
例子: pro.yf.bj
Artifact Id:项目的名字
例子: Mavne_HelloWorld
Version:版本号,SNAPSHOT意为快照,说明该项目还在开发中,是不稳定的版本
友情提示:上面的这三个因素构成了一个项目的基本信息(坐标),这是很重要的
Package:项目中源代码存放的包的路径
设定本地仓库的位置
1.配置好的eclipse进行设置
1.1设置eclipse关联上maven
Windows–>Prefrences–>Installations–>Add。installation name选maven的根目录,
然后一直按确定就OK啦
1.2更改本地仓库
友情提示:当maven环境配置好之后就会在当前电脑的用户下产生一个名字为.m2的文件夹,但是
作为开发者一般需要更改路径
但是在win10系统下可以自动产生的,不过这个没什么影响
怎样更改:
1)先修改D:\tools\apache-maven-3.5.0-bin\apache-maven-3.5.0\conf下的settings.xml,设定本地仓
库的路径和使用国内阿里镜像
<localRepository>D:\maven_new_localrepository</localRepository>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
备注:两者配置的位置不是紧挨着的,要分别配在不同的对应的位置上
2)去到D:\tools\apache-maven-3.5.0-bin\apache-maven-3.5.0\conf将settings.xml复
制一份到C:\Users\Jack\.m2
3)在D盘创建一个名字为maven_new_localrepository的文件夹
1.3验证更改本地仓库是否成功:
在dos下输入指令:mvn help:system,此时会看到maven_new_localrepository文件夹下
开始下载一些文件了
推荐一个mvn的好的下载的网站:https://mvnrepository.com/
2.maven构建仓库的类型分类:
2.1本地仓库: 默认地址为~/.m2/
2.2远程仓库又可简单分成两类:
中央仓库:http://repo1.maven.org/maven2/ 等价于 https://mvnrepository.com/
私服:是一种特殊的远程仓库,其实就是自己搭建的一个“类中央仓库”
五、pom.xml的配置
1、pom.xml中基本节点的含义
基本节点的含义:
modelVersion
指定了当前Maven模型的版本号,对于Maven2和Maven3来说,它只能是4.0.0
groupId:项目或者组织的唯一标志,并且配置时生成路径也是由此生成,
如org.myproject.mojo生成的相对路径为:/org/myproject/mojo
artifactId:项目的通用名称
version:项目的版本
packaging:打包机制,如pom,jar(默认的),maven-plugin,ejb,war,ear,rar,par
name:项目的名称
url:项目开发团队的网址,无关紧要,可以省略
description:项目描述
2、dependencies和dependency
前者包含后者。Maven的一个重要作用就是统一管理jar包,为了一个项目可以build或运行,项
目中不可避免的,会依赖很多其他的jar包,在Maven中,这些依赖就被称为dependency
dependcy:表示出依赖关系,即一个dependcy就是一种jar包
里面的属性值得意思:
type:默认为jar类型,常用的类型有:jar,ejb-client,test-jar...,
可设置plugins中的extensions值为true后在增加 新的类型
scope:是用来指定当前包的依赖范围,maven的依赖范围常有以下四种值:
compile(编译范围)
provided(已提供范围)
runtime(运行时范围)
test(测试范围)
system(系统范围)
optional:设置指依赖是否可选,默认为false,即子项目默认都继承,为true,则子项目必需显
示的引入,与dependencyManagement里定义的依赖类似 。
exclusions:如果X需要A,A包含B依赖,那么X可以声明不要B依赖,
只要在exclusions中声明exclusion.
exclusion:是将B从依赖树中删除,如上配置,alibaba.apollo.webx不想
使用com.alibaba.external ,但是alibaba.apollo.webx是集成
了com.alibaba.external,r所以就需要排除掉.
version;版本号
systempath:当scope的值为system时,提供相应的路径
简而言之:
内部包含若干<dependency>{ groupId, artifactId,version 三个基本属性
/*1.这三个是最常用的,2只要有这三个就能基本上能用了*/
type :默认jar类型
scope: 当前包依赖类型
optional: false时, 继承这个项目所有的子项目。 true时, 该项目的子项目需要显式引入
exclusion :排除某项 }
利用maven的时候产生jar冲突
用maven管理库依赖,有个好处就是连同库的依赖的全部jar文件一起下载,免去手工添加的麻烦,
但同时也带来了同一个jar会被下载了不同版本的问题,好在pom的配置里面允许用<exclusion>来排
除一些不需要同时下载的依赖jar
3、pom.xml中不太常用的节点
1.dependencyManagement:
通常在最顶层父pom中(在使用maven的继承特性的使用会用到),让所有在子项目中引用一个
依赖而不用显式地列出版本号。
2.modules:
将项目分块,达到高内聚,低耦合的目的
3.properties:
声明一些常量:设置编码集,设置某一系列类型的框架的版本
如:
<file.encoding>UTF-8<file.encoding>
<spring.version>3.2.3.RELEASE</spring.version>
引用时 : ${file.encoding} ${spring.version}
也可以通过project.xx引用项目的定义的属性,
例如: ${project.groupId} 引用当前pom定义的groupId
4.build: 构建项目需要的信息
defaultGoal 默认目标
directory 制定buildtarget目标下的目录
5.plugin: 声明项目中所使用的插件
6.pluginManagement:
作用类似于dependencyManagement, 定义子项目中的插件。 这样在子项目中使用插件时,
可以不用指定其版本,由父项目统一进行管理。
7.parent:
父项目的坐标。如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。
坐标包括group ID,artifact ID和 version。