Maven基础知识
一、Maven的作用
-
更方便的导入jar包,避免版本冲突问题
-
标准项目结构:

-
标准化的项目构建流程
二、Maven的安装和集成
-
安装步骤:
-
下载并解压 apache-maven-3.9.11-bin.zip
-
配置本地仓库:修改 conf/settings.xml 中的 为一个指定目录。
xml<localRepository>D:\JAVA\develop\apache-maven-3.9.11\mvn_repo</localRepository> <!-- 此处设置为自己的目录用于下载jar包 --> -
配置阿里云私服:修改 conf/settings.xml 中的标签,为其添加如下子标签:
xml<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>centralrOf> </mirror> -
配置环境变量:MAVEN_HOME为maven的解压目录,并将其bin目录加入PATH环境变量

- 在命令行中执行mvn -v测试Maven是否安装成功
-
-
VScode创建maven项目
三、依赖管理
3.1 依赖配置
-
依赖:指当前项目运行所需要的jar包,一个项目中可以引入多个依赖
-
配置:
- 在pom.xml中编写标签
- 在标签中使用引入坐标
- 定义坐标的 groupId, artifactId, version
- 点击刷新,引入最新加入的坐标
xml
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
- 如果不知道依赖的坐标信息,可以到maven网站搜索
3.2 依赖传递
- 依赖具有传递性
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源

-
VScode需要对依赖传递的项目,从最底层依赖,进入到对应文件根目录,依次向上执行
cmdmvn clean install最后能在maven控制面板中看到依赖传递
-
排除依赖:主动断开依赖的资源,被排出的资源无需指定版本
xml<dependencies> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>com.itheima</groupId> <artifactId>maven-projectB</artifactId> <version>1.0-SNAPSHOT</version> <!-- 排除依赖--> <exclusions> <exclusion> <groupId>junit</groupId> <artifactId>junit</artifactId> </exclusion> </exclusions> </dependency> </dependencies>
3.3 依赖范围
-
依赖的jar包,默认情况下可以再任何地方使用,可以使用...设置其作用范围

3.4 生命周期
-
Maven生命周期就是为了对所有的maven项目构建过程进行抽象和统一
-
Maven中有三套相互独立的生命周期
- clean:清理工作
- default:核心工作,如编译,测试,打包,安装,部署等
- site:生成报告、发布站点等
-
五个重要的生命周期阶段:
- clean:移除上一次构建生成的文件
- compile:编译项目源代码
- test:使用合适的单元测试框架运行测试(junit)
- package:将编译后的文件打包,如:jar、war
- install:安装项目到本地仓库
-
在Maven面板中 lifecycle中双击需要执行的阶段即可。
java
// 测试生命周期中的test操作
package com.zcn;
import org.junit.Test;
public class DemoTest {
@Test
public void test1() {
System.out.println("hello test1");
}
@Test
public void test2() {
System.out.println("hello test2");
}
@Test
public void test3() {
System.out.println("hello test3");
}
}