Maven基础使用
1. Maven概述
1.1 Maven是什么?
Maven是一款服务于Java平台的自动化构建工具。Maven 作为 Java 项目管理工具,它不仅可以用作包管理,还有许多的插件,可以支持整个项目的开发、打包、测试及部署等一系列行为。
传统工程我们直按把jar包放置在项目中, Maven工程真正的jar包放置在仓库中,项目中只用放置jar包的坐标。不使用Maven工具,当做 Java 项目需要第三方依赖包时,将别人打好的 Jar 包下载到本地,然后手动指定给项目。另外,比如版本控制,需要新版本怎么办,重新下载,重新指定,这个过程操作麻烦。而用了 Maven 之后,需要什么包,直接在 pom.xml 中添加几行 xml 代码(添加所依赖jar包的坐标),指定包名、版本等,就可以了,方便开发。
1.2 Maven可以帮我们解决什么样的问题呢?
- 构建工程,
- 管理jar,
- 编译代码,
- 自动运行单元测试,
- 打包
- 生成报表,
- 部署项目,生成web站点
1.3 Maven仓库的概念
Maven仓库用来存放Maven管理的所有Jar包。分为:本地仓库 和 中央仓库。
- 本地仓库:Maven本地的Jar包仓库。
- 中央仓库: Maven官方提供的远程仓库。
当项目编译时,Maven首先从本地仓库中寻找项目所需的Jar包,若本地仓库没有,再到Maven的中央仓库下载所需Jar包。
1.4 Maven的目录结构
Maven工程目录结构
图中有一个target目录,是因为将该java项目进行了编译,src/main/java下的源代码就会编译成.class文件放入target目录中,target就是输出目录。 作为一个 maven 工程,它的 src 目录和 pom.xml 是必备的。 进入 src 目录后,我们发现它里面的目录结构如下:
src
--src
--main
--java
--resources
--webapp
--test
--java
--resources
target
pom.xml
2. Maven的安装和配置
2.1 Maven官网下载Maven
Maven官网:https://maven.apache.org/:
Maven下载:https://maven.apache.org/download.cgi
这里本人用的版本是3.6.3的版本
之后找一个目录将压缩包解压至你要安装的目录即可
2.2 Maven的配置
1. 复制Maven的根路径
2. 配置Maven的环境
打开系统环境变量: 此电脑>高级系统设置>环境变量>
新建环境变量
编辑Path变量
%MAVEN_HOME%/bin
4. 验证Maven下载成功
启动CMD命令工具:
输入:mvn -v
2.3 修改Maven配置文件
2.3.1 修改本地仓库的路径
Maven根路径->conf-setting.xml
本地仓库 用来存储从远程仓库或者中央仓库下载的插件和jar包,项目使用一些插件或jar包 优先从本地仓库查找 默认本地仓库的位置在user.dir/.m2/repository,{user.dir}表示 windows 用户目录。一般都是在C盘中,在开发Maven项目过程中会下载非常多的jar包,而Maven默认的下载位置在C盘,小Du的Maven仓库已经达到了10G左右,如果不及时的修改,C盘很容易撑爆,且C盘容易损毁。
<localRepository>目录路径</localRepository>
这里建议是在Maven的根路径下新建一个maven-repo的目录
Maven根路径\repo
<localRepository>Maven根路径\repo </localRepository>
2.3.2 修改Maven的下载镜像地址
由于Maven默认的中央仓库的服务器是在国外,下载项目所需要的Jar包非常的慢所以换成国内的中央仓库
打开配置文件settings.xml
文件
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
3. Maven的基本命令和生命周期
3.1 Maven的基本命令
-
**-v:**查询Maven版本
本命令用于检查maven是否安装成功。
Maven安装完成之后,在命令行输入mvn -v,若出现maven信息,则说明安装成功。
-
compile:编译
将java源文件编译成class文件
-
test:测试项目
执行test目录下的测试用例
-
package:打包
将项目打成jar包
-
clean:删除target文件夹
-
install:安装
将当前项目放到Maven的本地仓库中。供其他项目使用
3.2 Maven的生命周期
Maven 构建项目生命周期描述的是一次构建过程经历经历了多少个事件
Maven 对项目构建的生命周期划分为3套
- clean:清理工作
- default:核心工作,例如编译,测试,打包,安装等
- site:产生报告,发布站点等
4.IDEA配置Maven和使用
4.1 IDEA配置Maven
打开Idea在Settings(快捷键Ctrl+Alt+s)中搜素Maven
4.2 Maven坐标
什么是坐标
- Maven 中的坐标是资源的唯一标识
- 使用坐标来定义项目或引入项目中需要的依赖
Maven 坐标主要组成
- groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.baidu)
- artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)
- version:定义当前项目版本号
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
4.3 Idea创建Maven项目
创建Maven模块
编写坐标
4.4 使用坐标导入Jar包
- 在 pom.xml 中编写
<dependencies>
标签 - 在
<dependencies>
标签中 使用<dependency>
引入坐标 - 定义坐标的 groupId,artifactId,version
- 点击刷新按钮,使坐标生效
比如导入Junit测试单元的Jar包
代码测试
如果在引入别的Jar包,就可以在Dependenices当中继续添加坐标即可
新引入MySQL的驱动包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.song</groupId>
<artifactId>maven-demo01</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!-- junit测试包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- mysql的驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
</dependencies>
</project>
4.5 Jar包的搜索
在实际开发中或者是在练习中,需要用到指定的Jar包,那么怎么获取所需的坐标呢?
网站搜索:
国外:https://mvnrepository.com/
国内:https://mvn.coderead.cn/
IDEA插件:maven-search
使用插件:Tools->Maven Search
4.6 jar包的依赖范围
通过设置坐标的依赖范围(scope),可以设置 对应jar包的作用范围:编译环境、测试环境、运行环境
依赖范围 | 编译classpath | 测试classpath | 运行classpath | 例子 |
---|---|---|---|---|
compile | Y | Y | Y | logback |
test | - | Y | - | Junit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | jdbc驱动 |
system | Y | Y | - | 存储在本地的jar包 |
<scope>
默认值:compile
| Junit |
| provided | Y | Y | - | servlet-api |
| runtime | - | Y | Y | jdbc驱动 |
| system | Y | Y | - | 存储在本地的jar包 |
<scope>
默认值:compile