Maven是一款为 java 项目构建管理、依赖管理的工具(软件),使用 Maven 可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。
Maven主要作用理解
1.场景概念:
场景1∶例如我们项目需要第三方库(依赖),如Druid连接池、MySQL数据库驱动和Jackson等。那么我们可以将需要的依赖项的信息编写到 Maven 工程的配置文件,Maven软件就会自动下载并复制这些依赖项到项目中,也会自动下载依赖需要的依赖!确保依赖版本正确无冲突和依赖完整!
场景2: 项目开发完成后,想要将项目打成.war文件,并部署到服务器中运行,使用 Maven
软件,我们可以通过一行构建命令(mvn package)快速项目构建和打包!节省大星时间!
2.依赖管理:
Maven可以管理项目的依赖,包括自动下载所需依赖库、自动下载依赖需要的依赖并且保证版本没有冲突、依赖版本管理等。通过Maven,我们可以方便地维护项目所依赖的外部库,而我们仅仅需要编写配置即可。
3.构建管理:
项目构建是指将源代码、配置文件、资源文件等转化为能够运行或部署的应用程序或库的过程!
Maven可以管理项目的编译、测试、打包、部署等构建过程。通过实现标准的构建生命周期,Maven可以确保每一个构建过程都遵循同样的规则和最佳实践。同时,Maven 的插件机制也使得开发者可以对构建过程进行扩展和定制。主动触发构建,只需要简单的命令操作即可。
注意!由于IDEA的创建项目都是单独的,所以每次新项目都要手动去配置一下Maven
创建JAVASE项目
右键项目创建 New Module 选择 java语言 Maven 以及 JDK17
上方命名代表文件在电脑中的命名,下方为文件在Maven仓库中的命名
创建JAVAEE项目
第一种:手动创建 需要完整的 webapp文件结构
第二种:插件:JBLJavaToWeb
|-- pom.xml # Maven 项目管理文件
|-- src
|-- main # 项目主要代码
| |-- java # Java 源代码目录
| | `-- com/example/myapp # 开发者代码主目录
| | |-- controller # 存放 Controller 层代码的目录
| | |-- service # 存放 Service 层代码的目录
| | |-- dao # 存放 DAO 层代码的目录
| | `-- model # 存放数据模型的目录
| |-- resources # 资源目录,存放配置文件、静态资源等
| | |-- log4j.properties # 日志配置文件
| | |-- spring-mybatis.xml # Spring Mybatis 配置文件
| | `-- static # 存放静态资源的目录
| | |-- css # 存放 CSS 文件的目录
| | |-- js # 存放 JavaScript 文件的目录
| | `-- images # 存放图片资源的目录
| `-- webapp # 存放 WEB 相关配置和资源
| |-- WEB-INF # 存放 WEB 应用配置文件
| | |-- web.xml # Web 应用的部署描述文件
| | `-- classes # 存放编译后的 class 文件
| `-- index.html # Web 应用入口页面
`-- test # 项目测试代码
|-- java # 单元测试目录
`-- resources # 测试资源目录
Maveb核心功能依赖和构建管理
<!-- gavp属性 -->
<!-- 不会改变 -->
<groupId>com.atguigu</groupId>
<artifactId>maven-javase-project-01</artifactId>
<!-- 构建过程 - 部署 - 修改 -->
<version>1.0-SNAPSHOT</version>
<!-- maven工程的打包方式 java jar [默认值] web war -->
<packaging>jar</packaging>
<!-- 第三方依赖信息声明
dependencies - 项目依赖信息的集合
dependency - 每个依赖项
[gav] - 一来的信息,就是其他maven的工程中的jar包
-->
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
</dependencies>
扩展构建管理和插件配置
构建概念:
项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。
主动触发场景:
- 重新编译 : 编译不充分, 部分文件没有被编译!
- 打包 : 独立部署到外部服务器软件,打包部署
- 部署本地或者私服仓库 : maven工程加入到本地或者私服仓库,供其他工程使用
命令方式构建:
语法: mvn 构建命令 构建命令....
| 命令 | 描述 |
|---|---|
| mvn clean | 清理编译或打包后的项目结构,删除target文件夹 |
| mvn compile | 编译项目,生成target文件 |
| mvn test | 执行测试源码 (测试) |
| mvn site | 生成一个项目依赖信息的展示页面 |
| mvn package | 打包项目,生成war / jar 文件 |
| mvn install | 打包后上传到maven本地仓库(本地部署) |
| mvn deploy | 只打包,上传到maven私服仓库(私服部署) |
可视化方式构建:
终端构建:
构建命令周期:
构建生命周期可以理解成是一组固定构建命令的有序集合,触发周期后的命令,会自动触发周期前的命令!也是一种简化构建的思路!
清理周期:主要是对项目编译生成文件进行清理
包含命令:clean
默认周期:定义了真正构件时所需要执行的所有步骤,它是生命周期中最核心的部分
包含命令:compile - test - package - install / deploy
报告周期
包含命令:site
打包: mvn clean package 本地仓库: mvn clean install
最佳使用方案:
- 打包: mvn clean package
- 重新编译: mvn clean compile
- 本地部署: mvn clean install
工程中的继承关系
子工程可以继承父工程的依赖
父工程的创建
<packaging>pom</packaging>
并且由于父工程只担当提供依赖的角色,将src文件夹删除
子工程的创建
右键父工程创建模块
<!-- parent 标签及继承父工程的 gav -->
<parent>
<groupId>com.atguigu</groupId>
<artifactId>maven-pom-parent-06</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
在父工程当中为子工程声明版本信息
<!-- dependencies是导入依赖,子工程都会拥有导入的依赖!!-->
<dependencies></dependencies>
<!-- 下面才是正确的声明方式!!指继承的依赖-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 导入com.fasterxml.jackson.core的依赖 不需要版本号(由父工程提供)-->
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
</dependencies>
小结:父工程只是提供版本号,并不会给父工程和子工程直接下载依赖,子工程需要通过手动导入依赖以及父工程中的版本号,才可以下载依赖。
工程中的聚合关系
- 聚合概念 Maven 聚合是指将多个项目组织到一个父级项目中,通过触发父工程的构建,统一按顺序触发子工程构建的过程!!
- 聚合作用
-
- 统一管理子项目构建:通过聚合,可以将多个子项目组织在一起,方便管理和维护。
- 优化构建顺序:通过聚合,可以对多个项目进行顺序控制,避免出现构建依赖混乱导致构建失败的情况。
当创建子工程时,父工程会自动配置
<modules>
<module>shop-user</module>
</modules>
Maven核心掌握总结
| 核心点 | 掌握目标 |
| 安装 | maven安装、环境变量、maven配置文件修改 |
| 工程创建 | gavp属性理解、JavaSE/EE工程创建、项目结构 |
| 依赖管理 | 依赖添加、依赖传递、版本提取、导入依赖错误解决 |
| 构建管理 | 构建过程、构建场景、构建周期等 |
| 继承和聚合 | 理解继承和聚合作用、继承语法和实践、聚合语法和实践 |