三、Maven
Maven是apache旗下的一一个开源项目,是一款用于管理和构建java项目的工具。
作用:
- 依赖管理:方便快捷的管理项目依赖的资源(jar包), 避免版本冲突问题。
- 统一项目结构:提供标准、统一的项目结构,maven项目。
- 项目构建:标准跨平台(Linux、Windows、MacOS)的自动化项目构建方式。提供统一指令(清理、编译、测试、打包、发布)
1、maven模型
通过插件对项目进行测试、打包等功能,打包和编译后的文件保存到target目录下
仓库:用于存储资源,管理各种jar包。
本地仓库:自己计算机上的-一个目录。
中央仓库:由Maven团队维护的全球唯一-的。 仓库地址: https://repo1.maven.org/maven2/
远程仓库(私服):一般由公司团队搭建的私有仓库。
2、Maven的安装
2.1 Maven压缩包目录结构介绍:
- bin:存放的是可执行文件,如:测试、打包、编译等这些指令。
- conf:存放配置文件的,配置本地仓库和阿里云私服就就在settings.xml文件下配置
- lib:存放的是maven它所依赖的一些jar包文件,因为maven是基于java开发的
2.1 安装和配置步骤解析
1、修改配置本地仓库和远程仓库,直接在conf/settings.xml文件中,修改添加本地仓库路径和添加阿里云仓库。
xml
<!-- 本地仓库的位置 -->
<localRepository>D:\programme_software\JavaRuntimeEnvironment\apache-maven-3.6.3\data</localRepository>
<!-- 阿里云镜像 -->
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<!-- https://maven.aliyun.com/repository/public/ -->
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
2、环境变量的添加
复制maven的解压的路径 --> 桌面右击此电脑 --> 属性 --> 高级系统设置 --> 环境变量 --> 在系统变量下点击新建 --> 变量名为:MAVEN_HOME,变量值为:复制的maven路径 --> 确定 --> 单击变量名中的path --> 新建 --> 输入:%MAVEN_HOME%/bin --> 确定
可以去cmd命令窗口中输入:mvn -v 查看是否配置成功。
3、在IDEA中全局配置maven
1、不要打开任何项目进入IDEA-->Customize-->All settings--> Build,Execution,Deployment --> Build Tools --> Maven
2、设置IDEA使用本地安装的Maven,并修改配置文件及本地仓库路径
3、注意修改JRE版本:Runner下修改,和Compiler-->Java Compiler ,版本也改为JRE对应的版本。
3、Maven项目创建
4、Maven包管理文件
4.1 Maven坐标
Maven中的坐标是资源的唯一标识,通过该坐标可以唯一定位资源位置。使用坐标来定义项目或引入项目中需要的依赖。
Maven坐标主要组成:
- groupld: 定义当前Maven项目隶属组织名称(通常是域名反写,例如: com.yhzy)
- artifactld: 定义当前Maven项目名称(通常是模块名称,例如order-service、 goods-service )
- version: 定义当前项目版本号
4.2 依赖配置
依赖:指当前项目运行所需要的jar包,一个项目中可以引入多个依赖。
配置:
- 在pom.xml中编写标签
- 在标签中使用引入坐标
- 定义坐标的groupld, artifactld, version
- 点击刷新按钮,引入最新加入的坐标
xml
<dependencies>
<!--Email-->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.0</version>
</dependency>
</dependencies>
注意:
如果引入的依赖,在本地仓库不存在,将会连接远程仓库/中央仓库,然后下载依赖。(这个过程会 比较耗时,耐心等待)
如果不知道依赖的坐标信息,可以到 https:/ /mvnrepository.com 中搜索。
4.3 依赖传递
依赖具有传递性,也就是,一个项目导入的依赖,可能依赖其它的依赖。比如项目A依赖项目B,项目B依赖项目C,这时B就是A的直接依赖,C就是A的间接依赖,A项目中也会导入C作为依赖。
可以在pow.xml文件中右击-->Diagrams-->Show Dependencies...,进行可视化的查看依赖之间的关系。
直接依赖:在当前项目中通过依赖配置建立的依赖关系。
间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源。
4.3.1 排除依赖
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本。如果不希望进行间接依赖,可以在引入直接依赖中添加标签:
xml
<dependencies>
<!--Email-->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.0</version>
</dependency>
<!--排除依赖,可以添加多个-->
<Kexclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependencies>
4.4 依赖范围
依赖的jar包,默认情况下,可以在任何地方使用。可以通过<scope...</ scope >设置其作用范围。
作用范围(默认):
- 主程序范围有效。 (main文件夹范围内)
- 测试程序范围有效。 (test文件夹范围内)
- 是否参 与打包运行。(package指令 范围内)
如果想要修改依赖范围,可以添加标签:
4.5 生命周期
Maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统一。
Maven中有3套相互独立的生命周期:
- clean: 清理工作。
- default: 核心工作,如:编译、测试、打包、安装、部署等。
- site:生成报告、发布站点等。
生命周期阶段常用的5个:
每套生命周期包含一些阶段 (phase) ,阶段是有顺序的,后面的阶段依赖于前面的阶段。
- clean:移除上一次构建生成的文件
- compile:编译项目源代码
- test:使用合适的单元测试框架运行测试(junit),运行所有单元测试
- package:将编译后的文件打包,如: jar、war等
- install:安装项目到本地仓库
执行指定生命周期的两种方式:
-
在idea中, 右侧的maven工具栏,选中对应的生命周期,双击执行。
-
在命令行中,通过命令执行,直接进入项目的文件夹的命令行。
javamvn clean mvn compile mvn package mvn test