一、Maven简介和快速入门
Maven是一款为Java项目构建管理、依赖管理的工具(软件),使用Maven可以自动化构建、测试、打包和发布项目,到底提高了开发效率和质量
二、基于IDEA的Maven工程创建
Maven工程项目结构
pom文件中,
1.模块改变,修改第一个数字,功能改变改第二个数字,改bug后修改第三个数字
2.版本号的声明,在<properties></properties>中声明,声明的标签建议两层以上,格式:技术名.version,声明后,可以在其他位置使用,使用格式:${标签}
eg.声明:
<properties>
<jackson.version>2.15.2</jackson.version>
</properties>
使用:
<dependencies>
<dependency>
<groupId>com.fasterxml.jackon.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
</dependencies>
三、依赖和构建管理
3.1依赖传递和冲突
(1)依赖传递
1)介绍
依赖传递指的是当一个模块或库A依赖于另一个模块或库B,而B又依赖于模块或库C,那么A会间接依赖于C。这种依赖传递结构可以形成一个依赖树。当我们引入一个库或框架时,构建工具(如Maven、Gradle)会自动解析和加载其所有的直接和间接依赖,确保这些依赖都可用。
2)作用
1.减少重复依赖:当多个项目依赖同一个库时,Maven 可以自动下载并且只下载一次该库。这样可以减少项目的构建时间和磁盘空间。
2.自动管理依赖:Maven可以自动管理依赖项,使用依赖传递,简化了依赖项的管理,使项目构建更加可靠和-致。
3.确保依赖版本正确性:通过依赖传递的依赖,之间都不会存在版本兼容性问题,确保依赖的版本正确性!
(2)依赖冲突
1)介绍
发现已经存在依赖(重复依赖)会终止依赖传递,避免重复依赖的问题
2)依赖冲突解决原则:
①第一原则:谁的引用的路径长度短,谁优先
eg.A 1.0依赖C 1.0,C 1.0依赖B 1.0,
F 2.0依赖B 2.0,若要导入A和F,会得到A,C,F,B 2.0
②第二原则:引用的路径长度一样,则按照dependencies声明的先后顺序,谁在上,谁优先
eg1.A 1.0依赖B 1.0
F 2.0依赖B,2.0
若导入A和F,则导入A,F,B,1.0
eg2. A 1.1依赖B 1.1,B 1.1依赖C 1.1
F 2.2依赖B 2.2
pom声明:
F 2.2
A 1.1
B 2.2
若要导入,最后会导入F 2.2, B 2.2, A 1.1
因为B 1.1与B2.2冲突,则后面的依赖全部终止
3.2依赖导入失败场景和解决方案
(1)在使用Maven构建项目时,可能会发生依赖项下载错误的情况,主要原因有以下几种:
1.下载依赖时出现网络故障或仓库服务器宕机等原因,导致无法连接至Maven仓库,从而无法下载依赖。
2.依赖项的版本号或配置文件中的版本号错误,或者依赖项没有正确定义,导致Maven下载的依赖项与实际需要的不一致,从而引发错误。
3.本地Maven仓库或缓存被污染或损坏,导致Maven无法正确地使用现有的依赖项,并且也无法重新下载!
(2)解决方案:
1.检查网络连接和Maven仓库服务器状态。
2.确保依赖项的版本号与项目对应的版本号匹配,并检查POM文件中的依赖项是否正确。
3.清除本地Maven仓库缓存(lastUpdated文件),因为只要存在lastupdated缓存文件,刷新也不会重新下载。本地仓库中,根据依赖的gav属性依次向下查找文件夹,最终删除内部的文件,刷新重新下载即可!
3.3扩展构建管理和插件配置
(1)项目构建
是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程。在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。
(2)主要触发场景
重新编译:编译不充分,部分文件没有被编译、
打包:独立部署到外部服务器软件,打包部署
部署本地或者私服仓库:maven工程加入到本地或者私服仓库,供其他工程使用
(3)触发方式
1)命令方式构建
语法:mvn 构建命令 构建命令...
注:命令执行需要进入到项目的根目录
部署必须是jar包形式
2)可视化构建
(4)构建命令周期
构建生命周期可以理解成是一组固定构建命令的有序集合,触发周期后的命令,会自动触发周期前的命令!也是一种简化构建的思路!
1)清理周期:主要是对项目编译生成文件进行清理
包含命令:clean
2)默认周期:定义了真正构件时所需要执行的所有步骤,是生命周期中最核心的部分
包含命令(按照此从左至右的固定顺序):compile-test-package-install/deploy
3)报告周期
包含命令:site
打包:mvn clean package本地仓库:mvn clean install
最佳使用方案:
打包:mvn clean package
重新编译:mvn clean conmp1ile
本地部署:mvn clean install
eg.打包只需要mvn clean package即可,但还会同时触发与package同一周期的complie,test命令,共四个命令
注:一个周期包含若干命令,一个命令包含若干插件,使用周期命令构建,简化构建过程,最终进行构建的是插件
(5)配置插件
打开pom文件,在<project></project>中编辑,使用<build></build>标签,再在此标签中导入插件
eg.将项目打包成war包,但我使用的是JDK17,和war包版本插件不匹配,这时,可以自己配置插件来代替maven自带的插件