1.什么是maven?
maven是Apache基金会管理的项目,开源;
maven是自动化构建工具。
- 1)自动化---给出命令,maven可以根据给出的命令实现操作。
- 2)构建---将项目中所需要的原材料,生产加工成为可以被运行和使用的项目的过程。
- 3)项目的原材料:静态的和动态的:静态的:html、css、js、图片、音频、视频、flash动画;动态的:servlet、jsp、代码、配置文件。
2.maven的作用?
- 1)自动化构建
- 2)实现jar包管理
- 3)实现项目结构设计
3.maven官网
4.下载和安装
1.下载位置
2. 安装条件
- A、maven的条件:jdk安装、maven安装路径不能有中文和空格
- B、maven的安装:解压即用,配置环境变量,可能需要初始化配置,测试 cmd-----> mvn -v ----->出现maven的安装或者配置信息
- C、初始化---如果都不配置,均使用默认配置方式
· 镜像配置、jdk版本配置、本地仓库配置
本地库配置(默认配置:当前系统登录用户目录下的.m2文件夹中)---路径中不含有中文和空格,例如:
<localRepository>G:\repository</localRepository>
镜像配置(默认:到中央库下载)
常见的镜像库:阿里(maven.aliyun,com)、华为
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>aliyun public repository</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
jdk版本(默认情况下,使用创建maven项目是,jdk版本默认是1.5版本)
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
5、maven的仓库
- 1)存储内容---jar包
- 2)本地库和远程库
- 3)本地库:当前所使用的电脑中的路径
- 4)远程库:中央库、镜像库、私服
- A、中央库:maven世界下的中心仓库,全世界公用
- B、镜像库:是中央库的副本,为了提高下载速度,使用国内的镜像库(阿里云、华为云)
- C、私服:局域网内的路径
6、使用maven工具,那么遵守工具的一些规则
- 1)创建项目时,项目的目录规则
- 2)pom.xml文件
- A、pom---project object model 项目对象模型,对使用maven工具创建的项目进行了相关的定义,是maven项目的核心,在pom.xml文件何如定义?
- B、可以定义项目的打包方式,相关依赖、当前项目坐标,配置jar包的统一管理、相关插件配置等。
- 3)坐标
用于确定jar包在仓库中的唯一位置的组成,坐标的组成(groupId、artifactId、version)
7.maven的使用
- 1)和其他工具整合使用,比如和eclipse整合、和idea整合。
- 2)eclipse或者idea负责准备项目的原材料;maven负责项目的结构设计、jar包的管理、项目自动化构建、分工协作。
- 3)idea工具和maven工具的整合,实际的情况(把maven作为插件向idea中添加),在欢迎界面或者工作区界面找到配置settings----build---build tools ---maven
- 4)使用maven创建项目(在idea整合Maven之后使用综合性质的工具创建项目),只是借助了maven,符合maven要求的目录结构,那么项目可以成为maven项目,但实际还是java项目或者是web项目
A、创建java性质的maven项目
使用模板、也可以不适用模板
此设置是当前项目的坐标设置:
groupId:组名,用来设置组名称,为项目实现分组,设置格式:通常是域名倒置的格式,如com.baidu;如果项目较为复杂,实现了分模块设计,那么在groupid中还可以添加整体项目名称,比如com.baidu.xxx(整体项目名称)
artifactId:项目id,设置项目名称,如果项目较为复杂,实现了分模块设计,那么artifactId可以设置模块名称
version:版本号,标志当前项目的开发版本;版本号的组成:大版本号、副版本号、小版本号、希腊字母(单词)
- 大版本号轻易不会变动,在jdk或者项目的架构发生时才会修改此号
- 副版本号在项目中扩展了新的功能的时候,会变化此号
- 小版本号变动频繁,主要是修复bug之后会变化此号
- 希腊字母:标志当前项目处于哪个阶段,比如开发阶段、测试阶段、稳定版
A、项目的属性标志<packaging>jar</packaging>
此配置缺省或者为jar,则是java目
B、创建web性质的maven项目
项目的属性标志:<packaging>war</packaging>
标志位web项目
8、项目的构建操作
- 1)假设项目原材料已经准备齐全,那么如何实现构建自动化操作
A、构建过程包含有主要的一些步骤:清理、编译、测试、报告、打包、安装、部署
B、对应这些步骤有相关命令
清理:对应命令clean,清除上一次编译的结果,为下一次重新编译做准备
验证项目是否正确(validate)
编译:对应命令compile,将java源程序进行编译
测试:对应命令test,执行test-java中的执行的测试代码
报告:展示测试结果
打包:对应命令package,将项目实现打包处理,java项目生成jar包,web项目生成war包
运行检查:verify
安装:对应命令install,将打成的包复制到本地库
部署:对应命令deploy,将本地库jar包上传到远程仓库或者实现项目的部署
- 2)生命周期
A、是指构建过程中的步骤实现分组(一个生命周期包含几个操作步骤);
B、maven中生命周期包含三个:清理周期(clean lifecycle)、默认周期(default lifecycle)、站点周期(site lifecycle)
C、当输入相关命令执行构建时,构建不是只执行命令指定的步骤,会从当前命令所在的周期中的的第一个步骤开始执行,,执行到命令指定的步骤
D、还可以使用组合命令(组合生命周期)实现不同周期的一次操作
9、maven的jar包管理
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
- 1)依赖:就是当我们的项目需要其他项目中的程序代码时,我们的项目中需要把其他项目引入,那么对于两个项目的关系来说,我们的项目依赖于被引入的项目;通常在项目中引入其他项目,实际上引入的是项目生成的jar包;所以把jar包看做依赖也可以;
- 2)如何把jar包引入到当前项目?在当前项目的pom.xml文件中,使用依赖配置来实现。
- 3)依赖的配置就是一个依赖的坐标配置,组成结构
- 4)在依赖配置中,决定依赖的作用范围的配置
<scope></scope>,通过此配置可以决定jar包中的程序在什么位置可以使用
Scope标签的设置值有:compile(默认值)、test、provided
- 5)jar包管理
A、maven可以实现jar包引入
B、Jar包的传递--依赖的传递:如果乙项目中使用到丙项目生成的jar包,而甲项目又需要使用乙项目生成的jar包,那么maven工具在甲项目引入乙项目依赖时,也会把丙项目的依赖引入到甲项目中,此时在甲项目中会有两个jar包,甲项目的pom.xml文件中不需要添加丙依赖配置,此时是maven的jar包传递操作
C、按照maven的默认情况,丙项目jar包会向甲项目中传递,有些时候,可能在甲项目中不需要把丙传递过来的,要想实现不传递,那么可以考虑scope标签中的值设置或者排除方式
D、版本冲突:同一种jar包不同版本的情况(在项目中jar包的依赖和传递等特点可能造成同一个jar包,出现不同版本),maven工具帮助我们解决不同版本的冲突问题;解决的原则:就近原则、声明原则(是指在当前项目中的pom.xml文件中的依赖的配置顺序决定最终冲突的jar包哪个版本传递,先配置的那个对应的jar包传递)
E、Jar包的统一版本管理