Maven
介绍
Maven是apache旗下的一个开源项目, 是一款用于管理和构建java项目的工具, 基于项目对象模型(POM)的概念, 通过一小段信息来管理项目的构建
Apache软件基金会, 成立于1999年7月, 是目前世界上最大的最受欢迎的开源软件基金会, 也是一个专门为支持开源项目而生的非营利性组织
开源项目: https://www.apache.org/index.html#projexts-list
作用:
- 依赖管理: 方便快捷的管理项目依赖的资源(jar包), 避免版本冲突问题,
- 统一项目结构: 提供标准, 统一的项目结构
- 项目构建: 标准跨平台(Linux, Windows, MaxOS)的自动化项目构建方式
仓库: 用于存储资源, 管理各种jar包
- 本地仓库: 自己计算机上的一个目录
- 中央仓库: 由Manen团队维护的全球唯一的, 仓库地址:https://repo1.maven.org/maven2/
- 远程仓库(私服): 一般由公司团队搭建的私有仓库
idea集成
安装
下载地址:https://archive.apache.org/dist/maven/maven-3/(建议3.6.3版本, 版本太高会报错)
参考黑马程序员的这个视频P51
验证: cmd中输入指令mvn -v
配置
idea项目内配置:
- 先创建一个空项目, 在项目结构中设置JDK的版本
- 设置的Build选项下的Build Tools选中maven, 设置Maven home path , User settings file , Local repository
- Maven选项下的Runner选择对应的JRE版本
- Compile选项下的Java Compile设置Project bytecode version字节码文件版本为当前JDK的版本
idea全局配置
- 关闭项目, 选择Customize中的All settings
- 后续步骤与上面的项目内配置相同
创建
- 创建好的空项目中创建模块, 选择Maven, 点击Next
- 填写模块名称, 坐标信息, 点击finish, 创建完成
- 编写HelloWorld, 并运行
Maven坐标
介绍:
- Maven中的坐标是资源的唯一标识, 通过该坐标可以唯一定位资源位置
- 使用坐标来定义项目或引入项目中需要的依赖
主要组成:
- groupId: 定义当前Maven项目隶属组织名称(通常是域名反写)
- artifactId: 定义当前Maven项目名称(通常是模块名称, 例如order-service goods-service)
- version: 定义当前项目版本号
<groupId>com.tyrant</groupId>
<artifactId>maven-project01</artifactId>
<version>1.0-SNAPSHOT</version>
导入
方式一: 打开IDEA, 选择右侧Maven面板, 点击 + 号, 选中对应项目的pom.xml文件, 点击即可导入
方式二: 打开IDEA, 在file中选择项目结构, 选择Moudles, 点击 + 号, 选中对应项目的pom.xml文件, 点击即可导入
依赖管理
依赖配置
依赖:
指当前项目运行所需要的jar包, 一个项目中可以引入多个依赖
配置:
- 在pom.xml中编写
<dependencies>
标签 - 在
<dependencies>
标签中使用<dependency>
引入坐标 - 定义坐标的groupId, artifactId, version
- 点击刷新按钮, 引入最新加入的坐标
注意:
- 如果引入的依赖在本地仓库不存在, 将会连接远程仓库/中央仓库, 然后下载依赖
- 如果不知道依赖的坐标信息, 可以到https://mvnrepository.com/
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.10</version>
</dependency>
</dependencies>
依赖传递
依赖具有传递性
-
直接依赖: 在当前项目中通过依赖配置建立的依赖关系
-
间接依赖: 被依赖的资源如果依赖其他资源, 当前项目间接依赖其他资源
-
排除依赖: 指主动断开依赖的资源, 被排除的依赖无需指定版本
<!--排除依赖-->
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
依赖范围
依赖的jar包, 默认情况下, 可以在任何地方使用, 可以通过<scope>...</scope>
设置其作用范围
作用范围:
- 主程序范围有效(main文件夹范围内)
- 测试程序范围有效(test文件夹范围内)
- 是否参与打包运行(package指令范围内)
scope值 | 主程序 | 测试程序 | 打包(运行) | 范例 |
---|---|---|---|---|
compile(默认) | Y | Y | Y | log4j |
test | - | Y | - | junit |
provide | Y | Y | - | servlet-api |
runtime | - | Y | Y | jdbc驱动 |
生命周期
Maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统一
Maven中有三套相互独立的生命周期:
- clean: 清理工作
- default: 核心工作, 如:编译, 测试, 打包, 安装, 部署等
- site: 生成报告, 发布站点等
主要注意五个阶段:
- clean: 移除上一次构建生成的文件
- compile: 编译项目源代码
- test: 使用合适的单元测试框架运行测试(junit)
- package: 将编译后的文件打包, 如: jar, war等
- install: 安装项目到本地目录
在同一套生命周期中, 当运行后面的阶段时, 前面的阶段都会运行
执行指定生命周期的两种方式:
- 在idea中, 右侧的maven工具栏, 选中对应的生命周期, 双击执行
- 在命令行中, 通过命令执行