Maven(一)

本文详细介绍了Maven在Java项目中的应用,包括Maven简介、IDEA下的工程创建、依赖和构建管理(包括依赖传递、冲突处理以及依赖导入失败的解决方案)、构建命令周期和插件配置等内容,帮助开发者提升开发效率和依赖管理能力。
摘要由CSDN通过智能技术生成

一、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自带的插件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值