1、Maven - 图1

一、Maven简介

1.1 在项目中如何导入jar包?

  • 下载jar包 (mvn)
  • 将下载的jar包拷贝到项目中(WEB-INF/lib)
  • 选择jar文件—右键—Add as Library

1.2 传统导入jar包的方式存在什么问题?

  • 步骤多(相对)——繁琐
  • 在不同的项目中如果需要相同的jar包,需要分别存储这个jar文件——冗余项目体积大
  • 在不同的环境下可能因为jar文件版本不一致导致项目无法运行(重新配置)——移植性差

1.3 项目生命周期

项目从编译到运行的整个过程

完整的生命周期:清理缓存—校验—编译—测试—打包—安装—部署

  • IDEA提供了一键构建项目的功能,但是如果我们需要自定义的生命周期管理,却没有现成的工具(例如清理缓存)

1.4 Maven简介

Maven是一个基于项目对象模型(POM)用于进行项目的依赖管理、生命周期管理的工具软件

核心功能

  • 依赖管理
  • 生命周期管理
  • 聚合工程

二、Maven安装及配置

2.1 Maven下载

2.2 Maven安装

Maven是基于Java语言进行开发的,因此依赖JDK(建议JDK1.7+)

开箱即用:直接解压即可

  • 解压(d:/mvn)
  • 目录结构:
    • bin 存放指令文件(Maven提供了一个mvn指令)
    • boot 包含了一个类加载框架的jar文件
    • conf 包含了Maven的核心配置文件settings.xml
    • lib 存放了maven运行所需的jar文件

2.3 配置环境变量

  • MAVEN_HOME D:\mvn\apache-maven-3.6.3
  • Path 增加 %MAVEN_HOME%\bin | 测试 | | —- | | image.png |

三、Maven的项目结构

使用Maven进行项目还有一个好处:无论使用什么样 的开发工具(eclipse/idea)项目的结构是统一的。

3.1 Maven的项目结构

  1. fmwy(项目名称)
  2. --src
  3. --main (存放项目的源文件)
  4. --java (存放java代码,相当于传统项目中的src目录)
  5. --resources (存放配置文件和静态资源的目录,相当于传统项目的web目录)
  6. --test (存放项目的单元测试代码)
  7. --java(测试代码)
  8. --pom.xml

3.2 pom.xml

POM Project Object Model,Maven可以根据pom文件的配置对此项目进行依赖管理;

也就是说项目中需要依赖,直接在pom.xml进行配置即可

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <!--指定项目模型版本-->
  6. <modelVersion>4.0.0</modelVersion>
  7. <!--指定项目的标识:G 企业标识 A 项目标识 V 版本-->
  8. <groupId>com.qfedu</groupId>
  9. <artifactId>fmwy</artifactId>
  10. <version>1.0.0</version>
  11. <!--配置当前项目的依赖-->
  12. <dependencies>
  13. </dependencies>
  14. </project>

如果需要在当前项目中添加依赖,只需在pom.xml文件中进行依赖配置即可

配置依赖 找到依赖的坐标,添加dependencies标签即可

  1. <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
  2. <dependency>
  3. <groupId>mysql</groupId>
  4. <artifactId>mysql-connector-java</artifactId>
  5. <version>8.0.16</version>
  6. </dependency>

四、依赖管理

4.1 Maven依赖管理的流程

image.png

4.2 Maven仓库介绍

  • 本地仓库 就是本地计算机上的某个文件夹(可以是自定义的任何文件夹)
  • 远程仓库 就是远程主机上的jar文件仓库
    • 中央仓库 maven官方提供的仓库,包含了所需的一切依赖(免配置)
    • 公共仓库 除了中央仓库以外的第三方仓库都是公共仓库,例如aliyun(需要配置)
    • 私服 企业搭建的供内部使用的maven仓库 | maven仓库 | | —- | | image.png |

4.3 Maven仓库配置

在maven_home/conf/settings.xml中进行配置

配置本地仓库

  1. <localRepository>d:\repo</localRepository>

配置公共仓库

  1. <mirrors>
  2. <mirror>
  3. <id>nexus-aliyun</id>
  4. <mirrorOf>central</mirrorOf>
  5. <name>Nexus aliyun</name>
  6. <url>http://maven.aliyun.com/nexus/content/groups/public</url>
  7. </mirror>
  8. </mirrors>

五、项目生命周期管理

5.1 生命周期介绍

项目构建的声明周期:项目开发结束之后部署到运行环境运行的过程

  • 清除缓存
  • 检查
  • 编译
  • 测试(就会执行maven项目中test目录下的单元测试)
  • 打包(war 、 jar)
  • 安装 (jar会被安装到本地仓库)
  • 部署 (将项目生成的包放到外部服务器中—私服仓库)

5.2 生命周期管理指令

在项目的根目录下执行mvn指令(此目录下必须包含pom.xml)

  • 清除缓存
  1. mvn clean
  • 检查
  1. mvn check
  • 编译
  1. mvn compile
  • 测试
  1. mvn test
  • 打包
  1. mvn package
  • 安装
  1. mvn install
  • 部署
  1. mvn deploye

六、基于IDEA的Maven使用

6.1 在IDEA中关联Maven

maven配置
image.png
image.png

说明: IDEA本身集成了Maven,考虑到IDEA和Maven版本的兼容性,Idea不建议配置比默认版本更新的版本,建议使用idea自带的maven。

6.2 使用IDEA创建Maven项目

6.2.1 Java项目
创建Java项目
image.png
image.png
image.png

6.2.2 web项目
  • 创建maven项目:maven-demo2
  • 在pom.xml文件设置打包方式为war
    ```xml <?xml version=”1.0” encoding=”UTF-8”?> <project xmlns=”http://maven.apache.org/POM/4.0.0

    1. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4.0.0

    com.qfedu maven-demo2

    1.0.0 war

  1. - **完成web项目结构**<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/23162011/1644054932577-9a4f3ed3-aa90-405f-a14f-ced1f8ed2e4e.png#clientId=u8878f32e-4630-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=214&id=ub8c3b3c4&margin=%5Bobject%20Object%5D&name=image.png&originHeight=311&originWidth=1003&originalType=binary&ratio=1&rotation=0&showTitle=false&size=15243&status=done&style=none&taskId=u0b7b8dd8-4122-40bd-96bc-a46310e9776&title=&width=691.1283580775272)
  2. - **配置web组件—Tomcat**<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/23162011/1644054940979-fc99fa61-8616-485e-b595-dc8c1a948160.png#clientId=u8878f32e-4630-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=158&id=u3e104d9f&margin=%5Bobject%20Object%5D&name=image.png&originHeight=230&originWidth=992&originalType=binary&ratio=1&rotation=0&showTitle=false&size=21306&status=done&style=none&taskId=u0320d584-2e2a-4f35-9847-5b55bb0e4d8&title=&width=683.5486851574348)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/23162011/1644054945237-218feec1-bf64-45f9-bd5a-27b3c28d559f.png#clientId=u8878f32e-4630-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=517&id=u98a6dcb4&margin=%5Bobject%20Object%5D&name=image.png&originHeight=751&originWidth=1447&originalType=binary&ratio=1&rotation=0&showTitle=false&size=49695&status=done&style=none&taskId=ucb7e2992-dd35-4074-be5c-3e562a062b9&title=&width=997.0715195794436)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/23162011/1644054951020-c6d82e22-f2cf-4231-b6be-da35be233e46.png#clientId=u8878f32e-4630-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=352&id=u68749689&margin=%5Bobject%20Object%5D&name=image.png&originHeight=511&originWidth=1261&originalType=binary&ratio=1&rotation=0&showTitle=false&size=32488&status=done&style=none&taskId=u2314f99f-514b-446b-add1-ab96955e1e5&title=&width=868.9061411124246)
  3. - **部署web项目**<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/23162011/1644054961489-83b743fa-f35c-4113-b022-e571b16ab9f6.png#clientId=u8878f32e-4630-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=635&id=ud6ff1779&margin=%5Bobject%20Object%5D&name=image.png&originHeight=921&originWidth=1447&originalType=binary&ratio=1&rotation=0&showTitle=false&size=83567&status=done&style=none&taskId=u10ef0e96-81c6-4cdc-9b3a-ddde5feaa65&title=&width=997.0715195794436)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/23162011/1644054967584-0d09634e-f17e-4729-bcd7-dbb3da267370.png#clientId=u8878f32e-4630-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=584&id=u2ad14dc5&margin=%5Bobject%20Object%5D&name=image.png&originHeight=847&originWidth=1431&originalType=binary&ratio=1&rotation=0&showTitle=false&size=69749&status=done&style=none&taskId=ud5fce033-a0c4-4718-b607-cacc8da9ffb&title=&width=986.0465407865818)
  4. <a name="f6900e9c"></a>
  5. #### 6.3 在IDEA中使用Maven进行依赖管理
  6. <a name="62a23224"></a>
  7. ###### 6.3.1 查找依赖坐标
  8. - [https://mvnrepository.com/](https://mvnrepository.com/)
  9. <a name="2f537f28"></a>
  10. ###### 6.3.2 添加依赖
  11. - 将依赖的坐标配置到项目的pom.xml文件dependencies标签中
  12. ```xml
  13. <?xml version="1.0" encoding="UTF-8"?>
  14. <project xmlns="http://maven.apache.org/POM/4.0.0"
  15. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  16. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  17. <modelVersion>4.0.0</modelVersion>
  18. <groupId>com.qfedu</groupId>
  19. <artifactId>maven-demo2</artifactId>
  20. <version>1.0.0</version>
  21. <!--设置项目打包方式为war-->
  22. <packaging>war</packaging>
  23. <dependencies>
  24. <!--在此位置配置项目中所需依赖的坐标 GAV-->
  25. <dependency>
  26. <groupId>com.google.code.gson</groupId>
  27. <artifactId>gson</artifactId>
  28. <version>2.8.5</version>
  29. </dependency>
  30. <dependency>
  31. <groupId>org.projectlombok</groupId>
  32. <artifactId>lombok</artifactId>
  33. <version>1.18.18</version>
  34. <scope>provided</scope>
  35. </dependency>
  36. </dependencies>
  37. </project>

6.3.3 依赖范围

在通过dependency添加依赖时,可以通过scope标签配置当前依赖的适用范围

  • test 只在项目测试阶段引入当前依赖(编译、测试)

    1. <dependency>
    2. <groupId>junit</groupId>
    3. <artifactId>junit</artifactId>
    4. <version>4.13.2</version>
    5. <scope>test</scope>
    6. </dependency>
  • runtime 只在运行时使用(运行、测试运行)

  • provided 在(编译、测试、运行)
  • compile 在(编译、测试、运行、打包)都引入

6.4 在IDEA中使用Maven进行项目构建

6.4.1 Maven项目构建生命周期说明
  • clean 清理缓存 清理项目生成的缓存
  • validate 校验 验证项目需要是正确的(项目信息、依赖)
  • compile 编译 编译项目专供的源代码
  • test 测试 运行项目中的单元测试
  • package 打包 将项目编译后的代码打包成发布格式
  • verify 检查 对集成测试的结果进行检查、确保项目的质量是达标的
  • install 安装 将包安装到maven的本地仓库,以便在本地的其他项目中可以引用此项目(聚合工程)
  • deploy 部署 将包安装到私服的仓库,以供其他开发人员共享

6.4.2 IDEA进行生命周期管理
  • 可视化
    image.png
  • 终端指令
    选择项目名称—-右键—-Open in Terminal
    mvn clean

七、私服

企业搭建供内部使用的一个Maven仓库

  • 开发者需要依赖直接从私服下载
  • 私服可以实现企业内部依赖的共享:当企业开发了一个通用插件(jar),可以发布到私服,可以连接到当前私服的其他开发者就可以共享这个插件了

7.1 私服搭建

我们可以通过专门的Maven仓库管理软件来搭建私服。例如:Apache Archiva、Nexus

7.1.1 下载Nexus

7.1.2 解压nexus

image.png

7.1.3 安装并运行nexus
  • 进入到nexus-2.14.11-01/bin目录
  • 管理员身份打开cmd命令行,执行指令
    image.png

7.1.4 登录Nexus

私服管理器登录地址: http://localhost:8081/nexus

image.png

  • 私服中仓库类型

image.png

  • 私服仓库组的配置

image.png

7.2 配置私服

7.2.1 在maven的settings.xml文件的servers标签中
  1. <!--配置连接私服所需的帐号和密码-->
  2. <server>
  3. <id>nexus-public</id> <!-- nexus的认证id -->
  4. <username>admin</username> <!--nexus中的用户名密码-->
  5. <password>admin123</password>
  6. </server>

7.2.2 在maven的settings.xml文件的profiles标签中

repository 和 pluginRepository的 id子标签的值,要和上面配置的server 的id子标签的值一致

  1. <profile>
  2. <id>nexus</id>
  3. <repositories>
  4. <repository>
  5. <id>nexus-public</id>
  6. <name>Nexus Release Snapshot Repository</name>
  7. <url>http://localhost:8081/nexus/content/groups/public/</url>
  8. <releases><enabled>true</enabled></releases>
  9. <snapshots><enabled>true</enabled></snapshots>
  10. </repository>
  11. </repositories>
  12. <pluginRepositories>
  13. <pluginRepository>
  14. <id>nexus-public</id>
  15. <url>http://localhost:8081/nexus/content/groups/public/</url>
  16. <releases><enabled>true</enabled></releases>
  17. <snapshots><enabled>true</enabled></snapshots>
  18. </pluginRepository>
  19. </pluginRepositories>
  20. </profile>

7.2.3 在maven的settings.xml文件的activeProfiles配置激活profile
  1. <activeProfiles>
  2. <activeProfile>nexus</activeProfile>
  3. </activeProfiles>