1.什么是maven:
中文意思为“知识的积累”,是Apache基金会出产的一个进行项目构建的工具,其核心是pom.xml(pom=Project Object model 项目对象模型),定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等。
简而言之:
Maven是Java平台下的一款项目构建和依赖管理(统一管理jar包)的自动化管理工具。
友情提示:
项目构建:将我们的源代码、配置文件变成可执行的war包或者jar包。
依赖管理(统一管理jar包):项目需要正常运行,必须依赖一些第三方的jar包,对于这些第三方的jar包的管理,可以认为就是依赖的管理。
2.maven的特点:
2.1 原来的项目中需要的jar包必须手动“复制”、”粘贴” 到WEB-INF/lib 项目下,而借助Maven,可以将jar包仅
仅保存在“仓库”中,有需要使用的工程只需要“引用”这个文件,并不需要重复复制到工程中。
2.2 原来的项目中所需要的jar包都是提前下载好的,而Maven在联网状态下会自动下载所需要的jar包。首先在本地
仓库中找,找不到就在网上进行下载。
2.3 原来的项目中一个jar包所依赖的其他jar包必须手动导进来,而Maven会自动将被依赖的jar包导进来。
2.4 原来的项目一个项目就是一个工程,而借助Maven可以将一个项目拆分成多个工程。
3.关于maven
3.1 maven坐标三要素:Group id、Artifact id、Version
Group Id:意思为公司名或者组织名
com.baidu.bj org.apache.uk
例子:pro.yf.bj
Artifact Id:项目的名字
例子:Mavne_HelloWorld
Version:版本号,SNAPSHOT意为快照,说明该项目还在开发中,是不稳定的版本
友情提示:上面的这三个因素构成了一个项目的基本信息(坐标),这是很重要的
Package:项目中源代码存放的包的路径
3.2 maven的三套生命周期:clean、default(build)、site
3.2.1 Clean :
在进行真正的构建之前进行一些清理工作。 简称 “清理”,且包含三个phase(阶段)。
1)pre-clean:执行清理前需要完成的工作
2)clean:清理上一次构建生成的文件
3)post-clean:执行清理后需要完成的工作
3.2.2 Default :
定义了真正构建时所需要执行的所有步骤:,编译,测试,打包,部署等等。 简称"构建项目",且包含以下几个重要的阶段
1)validate:验证工程是否正确,所有需要的资源是否可用。
2)compile:编译项目的源代码。
3)test:使用合适的单元测试框架来测试已编译的源代码。这些测试不需要已打包和布署。
4)Package:把已编译的代码打包成可发布的格式,比如jar。
5)integration-test:如有需要,将包处理和发布到一个能够进行集成测试的环境。
6)verify:运行所有检查,验证包是否有效且达到质量标准。
7)install:把包安装到maven本地仓库,可以被其他工程作为依赖来使用。
8)Deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
3.2.3 Site :
生成项目报告建立和发布项目站点,且包含以下几个重要的阶段
1)pre-site:生成项目站点之前需要完成的工作
2)site:生成项目站点文档
3)post-site:生成项目站点之后需要完成的工作
4)site-deploy:将项目站点发布到服务器
3.3 maven创建项目
3.4 第一个maven项目
3.5 maven项目的目录结构
4.pom.xml
4.1 什么是pom:
pom作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配
置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,
以及其他所有的项目相关因素
简而言之:就是项目的配置清单
4.2 基本样子
<dependencies>
<parent>
<dependencyManagement>
<modules>
<properties>
<build>
<plugin>
<pluginManagement>
4.3 基本节点的含义:
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:项目描述
4.4 dependencies和dependency的讲解:
友情提示:前者包含后者。前面说了,Maven的一个重要作用就是统一管理jar包,为了一个项目可以build或运行,项目中不可避免的,会依赖很多其他的jar包,在Maven中,这些依赖就被称为dependency
4.4.1 举个例子
比方说我的项目中用到了MyBatis,那么可以这么配置:我们可以去https://mvnrepository.com/这个网站去直接下载
org.mybatis mybatis 3.2.54.4.2 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 :排除某项
}
4.4.3 利用maven的时候产生jar冲突:
maven的exclusion解决版本问题:用maven管理库依赖,有个好处就是连同库的依赖的全部jar文件一起下载,免去手工添加的麻烦,但同时也带来了同一个jar会被下载了不同版本的问题,好在pom的配置里面允许用来排除一些不需要同时下载的依赖jar
可以参考如图:maven的exclusion解决jar冲突.png
5.pom.xml中不太常用的节点
5.1 dependencyManagement:
通常在最顶层父pom中(在使用maven的继承特性的使用会用到),让所有在子项目中引用一个依赖而不用显式地列出版本号。
5.2 modules:
将项目分块,达到高内聚,低耦合的目的(本身功能很强大,不用再引入其他类)
5.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
5.4 build:构建项目需要的信息
defaultGoal 默认目标
directory 制定buildtarget目标下的目录
5.5 plugin:
声明项目中所使用的插件
5.6 pluginManagement:
作用类似于dependencyManagement, 定义子项目中的插件。 这样在子项目中使用插件时,可以不用指定其版本,由父项目统一进行管理。
5.7 parent:父项目的坐标。
如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。 坐标包括group ID,artifact ID和 version。