前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Maven】005-基于 IDEA 进行 Maven 依赖管理

【Maven】005-基于 IDEA 进行 Maven 依赖管理

作者头像
訾博ZiBo
发布于 2025-01-06 12:27:54
发布于 2025-01-06 12:27:54
18100
代码可运行
举报
运行总次数:0
代码可运行

【Maven】005-基于 IDEA 进行 Maven 依赖管理

一、Maven 依赖管理

自动解析依赖关系 + 自动下载和管理依赖!

Maven 依赖管理是 Maven 软件中最关键的功能之一。通过定义项目对象模型(POM)文件,Maven 能够自动解析项目的依赖关系,实现自动下载和管理这些依赖项。这一过程在 Maven 仓库的支持下进行,避免了开发人员手动下载和管理依赖的繁琐工作,并减少了版本冲突和依赖缺失的风险。

Maven 仓库扮演着关键的角色,为开发人员提供了一个集中存储和管理软件包的地方。通过 Maven 仓库,开发人员可以访问各种开源项目、第三方库和框架,并将它们集成到自己的应用程序或模块中。这种自动化的依赖解析和管理机制使得软件开发过程更加高效和可靠。

二、GAVP 再说明

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- 模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
<groupId>com.companyname.project-group</groupId>
<!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
<artifactId>project</artifactId>
<!-- 版本号 -->
<version>1.0.0</version>

<!--打包方式
    默认:jar
    jar 指的是普通的 java 项目打包方式! 项目打成jar包!
    war 指的是 web 项目打包方式!项目打成war包!
    pom 不会讲项目打包!这个项目作为`父工程`,被其他工程聚合或者继承!
-->
<packaging>jar/pom/war</packaging>

三、Maven 工程依赖管理配置

1、依赖配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- 
   通过编写依赖 jar 包的 gav 必要属性,引入第三方依赖!
   scope 属性是可选的,可以指定依赖生效范围!
   依赖信息查询方式:
      1. maven 仓库信息官网 https://mvnrepository.com/
      2. maven search 插件搜索
 -->
<dependencies>
    <!-- 引入具体的依赖包 -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
        <!-- 依赖范围 -->
        <scope>runtime</scope>
    </dependency>

</dependencies>

2、版本统一声明和使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--声明版本-->
<properties>
  <!--命名随便,内部制定版本号即可!-->
  <junit.version>4.12</junit.version>
  <!-- 也可以通过 maven 规定的固定的 key,配置 maven 的参数!如下配置编码格式!-->
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <!--引用 properties 声明版本 -->
    <version>${junit.version}</version>
  </dependency>
</dependencies>

3、依赖范围说明

通过设置坐标的依赖范围(scope),可以设置 对应 jar 包的作用范围:编译环境、测试环境、运行环境

依赖范围

描述

compile

编译依赖范围,scope 元素的缺省值。使用此依赖范围的 Maven 依赖,对于三种 classpath 均有效,即该 Maven 依赖在上述三种 classpath 均会被引入。例如,log4j 在编译、测试、运行过程都是必须的。

test

测试依赖范围。使用此依赖范围的 Maven 依赖,只对测试 classpath 有效。例如,Junit 依赖只有在测试阶段才需要。

provided

已提供依赖范围。使用此依赖范围的 Maven 依赖,只对编译 classpath 和测试 classpath 有效。例如,servlet-api 依赖对于编译、测试阶段而言是需要的,但是运行阶段,由于外部容器已经提供,故不需要 Maven 重复引入该依赖。

runtime

运行时依赖范围。使用此依赖范围的 Maven 依赖,只对测试 classpath、运行 classpath 有效。例如,JDBC 驱动实现依赖,其在编译时只需 JDK 提供的 JDBC 接口即可,只有测试、运行阶段才需要实现了 JDBC 接口的驱动。

system

系统依赖范围,其效果与 provided 的依赖范围一致。其用于添加非 Maven 仓库的本地依赖,通过依赖元素 dependency 中的 systemPath 元素指定本地依赖的路径。鉴于使用其会导致项目的可移植性降低,一般不推荐使用。

import

导入依赖范围,该依赖范围只能与 dependencyManagement 元素配合使用,其功能是将目标 pom.xml 文件中 dependencyManagement 的配置导入合并到当前 pom.xml 的 dependencyManagement 中。

4、Maven工程依赖下载失败错误解决(重点)

可能原因

在使用 Maven 构建项目时,可能会发生依赖项下载错误的情况,主要原因有以下几种:

  1. 下载依赖时出现网络故障或仓库服务器宕机等原因,导致无法连接至 Maven 仓库,从而无法下载依赖。
  2. 依赖项的版本号或配置文件中的版本号错误,或者依赖项没有正确定义,导致 Maven 下载的依赖项与实际需要的不一致,从而引发错误。
  3. 本地 Maven 仓库或缓存被污染或损坏,导致 Maven 无法正确地使用现有的依赖项。
解决方案

检查网络连接和 Maven 仓库服务器状态。

确保依赖项的版本号与项目对应的版本号匹配,并检查 POM 文件中的依赖项是否正确。

清除本地 Maven 仓库缓存(lastUpdated 文件),因为只要存在 lastupdated 缓存文件,刷新也不会重新下载。本地仓库中,根据依赖的 gav 属性依次向下查找文件夹,最终删除内部的文件,刷新重新下载即可!

例如: pom.xml依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid</artifactId>
  <version>1.2.8</version>
</dependency>

本地 Maven 仓库文件查找方式:

image_m3iQtBLARz
image_m3iQtBLARz

或者可以将清除 lastUpdated文件 的操作写在一个脚本文件中,手动创建文件"clearLastUpdated.bat",名字任意,但是后缀必须是 bat,将以下内容复制到文件中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cls 
@ECHO OFF 
SET CLEAR_PATH=D: 
SET CLEAR_DIR=D:\MySoft\Environment\Maven\repository(本地仓库路径,改成自己的!)
color 0a 
TITLE ClearLastUpdated For Windows 
GOTO MENU 
:MENU 
CLS
ECHO. 
ECHO. * * * *  ClearLastUpdated For Windows  * * * * 
ECHO. * * 
ECHO. * 1 清理*.lastUpdated * 
ECHO. * * 
ECHO. * 2 查看*.lastUpdated * 
ECHO. * * 
ECHO. * 3 退 出 * 
ECHO. * * 
ECHO. * * * * * * * * * * * * * * * * * * * * * * * * 
ECHO. 
ECHO.请输入选择项目的序号: 
set /p ID= 
IF "%id%"=="1" GOTO cmd1 
IF "%id%"=="2" GOTO cmd2 
IF "%id%"=="3" EXIT 
PAUSE 
:cmd1 
ECHO. 开始清理
%CLEAR_PATH%
cd %CLEAR_DIR%
for /r %%i in (*.lastUpdated) do del %%i
ECHO.OK 
PAUSE 
GOTO MENU 
:cmd2 
ECHO. 查看*.lastUpdated文件
%CLEAR_PATH%
cd %CLEAR_DIR%
for /r %%i in (*.lastUpdated) do echo %%i
ECHO.OK 
PAUSE 
GOTO MENU 

另外一个参考脚本(一键清理maven仓库的缓存文件):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@echo off
setlocal
set REPO_DIR=D:\MySoft\Environment\Maven\repository

:menu
cls
echo Maven Repository Cache Management
echo ----------------------------------
echo [1] View Cache Files
echo [2] Clear Cache Files
echo [3] Exit
echo ----------------------------------
set /p choice="Enter your choice (1-3): "
if "%choice%"=="1" goto viewCache
if "%choice%"=="2" goto clearCache
if "%choice%"=="3" goto end
echo Invalid choice, please choose again.
pause
goto menu

:viewCache
echo Viewing cache files...
for /r "%REPO_DIR%" %%i in (*.lastUpdated) do echo %%i
pause
goto menu

:clearCache
echo Clearing cache files...
for /r "%REPO_DIR%" %%i in (*.lastUpdated) do (
    echo Deleting: %%i
    del "%%i"
)
pause
goto menu

:end
endlocal

四、Maven 工程 Build 构建配置

默认情况下,构建不需要额外配置,都有对应的缺省配置。 当然了,我们也可以在pom.xml定制一些配置,来修改默认构建的行为和产物! 例如:

  1. 指定构建打包文件的名称,非默认名称
  2. 制定构建打包时,指定包含文件格式和排除文件
  3. 打包插件版本过低,配置更高版本插件

构建配置是在pom.xml / build标签中指定!

1、指定打包命名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- 默认的打包名称:artifactid+verson.打包方式 -->
<build>
  <finalName>定义打包名称</finalName>
</build>

2、指定打包文件

如果在 java 文件夹中添加 java 类,会自动打包编译到 classes 文件夹下!

但是在 java 文件夹中添加 xml 文件,默认不会被打包!

默认情况下,按照 maven 工程结构放置的文件会默认被编译和打包!

除此之外、我们可以使用 resources 标签,指定要打包资源的文件夹要把哪些静态资源打包到 classes 根目录下!

应用场景:MyBatis 中有时会将用于编写 SQL 语句的映射文件和 mapper 接口都写在 src/main/java 下的某个包中,此时映射文件就不会被打包,如何解决

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<build>
    <!--设置要打包的资源位置-->
    <resources>
        <resource>
            <!--设置资源所在目录-->
            <directory>src/main/java</directory>
            <includes>
                <!--设置包含的资源类型-->
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>
</build>

3、配置依赖插件

dependencies 标签下引入开发需要的jar包!我们可以在 build/plugins/plugin 标签引入插件!

常用的插件:修改 jdk 版本、tomcat 插件、mybatis 分页插件、mybatis 逆向工程插件等等!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<build>
  <plugins>
      <!-- java编译插件,配jdk的编译版本 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
      <!-- tomcat插件 -->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
         <version>2.2</version>
          <configuration>
          <port>8090</port>
          <path>/</path>
          <uriEncoding>UTF-8</uriEncoding>
          <server>tomcat7</server>
        </configuration>
      </plugin>
    </plugins>
</build>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
14. Groovy 语言结构-脚本和类知识学习
本篇内容为Groovy学习第十四篇内容。本篇内容为Groovy语言中的脚本(Script)和类(classes)的知识。
zinyan.com
2022/12/07
1.2K0
22. Groovy 面向对象编程-Traits特性学习-第三篇 super关键字
前面介绍了如何创建traits,如何使用traits。如何使用多个trait以及继承和运行时状态下的traits使用
zinyan.com
2023/02/23
5190
22. Groovy 面向对象编程-Traits特性学习-第三篇 super关键字
23. Groovy 面向对象编程-Traits特性学习-第四篇 高级功能
例如方法继承与Java8的区别。与Mixins的差异。以及静态方法属性和字段等相关知识点,
zinyan.com
2023/02/23
4960
23. Groovy 面向对象编程-Traits特性学习-第四篇 高级功能
21. Groovy 面向对象编程-Traits特性学习-第二篇
本篇内容为Groovy学习第二十一篇,上篇学习了Traits的一些使用。本篇继续深入学习Traits相关知识。
zinyan.com
2023/02/23
4890
21. Groovy 面向对象编程-Traits特性学习-第二篇
Static 关键字的 5 种用法,你会几种?
说到static,静态变量和静态方法大家随口就来,因为他们在实际开发中应用很广泛,但他们真正在使用的时候会存在很多问题,而且它的使用不只那两种:
JavaFish
2019/10/17
7050
Groovy-2.基本语法
as,assert,break,case,catch,class,const,continue,def,default,do,else,enum,extends,false,Finally,for,goto,if,implements,import,in,instanceof,interface,new,pull,package,return,super,switch,this,throw,throws,trait,true,try,while
悠扬前奏
2019/06/02
6400
Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字
  首先包其实就是个文件夹.作用就是管理类. Java中每次定义一个类的时候.通过Java编译之后.都会生成一个扩展名为.class的文件.但是当这个程序规模逐渐庞大的时候.就很容易发生类名名称冲突的现象. 那么JDK API中. 提供了成千上万的具有各种功能的类.有效的管理就是通过类包来管理.
IBinary
2019/05/25
6120
大数据必学Java基础(三十八):包和import讲解
(1)使用不同包下的类要需要导包: import **.*.*; 例如:import java.util.Date;
Lansonli
2022/08/02
3040
大数据必学Java基础(三十八):包和import讲解
2--Gradle入门 - Groovy简介、基本语法
Gradle 需要 Groovy 语言的支持,所以本章节主要来介绍 Groovy 的基本语法。
Devops海洋的渔夫
2023/09/01
1K0
2--Gradle入门 - Groovy简介、基本语法
25. Groovy 孵化功能-记录类record和密封sealed的学习
本篇内容为Groovy学习笔记第二十五篇。主要内容为Groovy孵化功能(incubating)的学习。
zinyan.com
2023/02/23
1K0
25. Groovy 孵化功能-记录类record和密封sealed的学习
34. Groovy 语法 类型知识详解-第一篇
本篇内容开始介绍Groovy中的各种类型知识。将会分多篇文章详细介绍和学习Groovy中的有关于类型的相关知识点。
zinyan.com
2023/02/23
7990
34. Groovy 语法 类型知识详解-第一篇
static 关键字的用法
在 Java 中,static 关键字是一个重要的修饰符,用于表示类级别的成员。了解 static 的用法有助于更好地管理内存和提高代码的效率。以下是 static 关键字的几种主要用法:
繁依Fanyi
2024/10/28
1230
27. Groovy 闭包知识-第二篇 委托和授权学习
这一篇开始学习闭包的授权策略等知识点。例如和lambda的区别,闭包的委托delegate,所有owner等作用。
zinyan.com
2023/02/23
4880
27. Groovy 闭包知识-第二篇 委托和授权学习
Java 静态导入:规则、实践与应用场景
Java 编程中,“静态导入”(import static)自 Java 5 引入,是提升代码可读性和编写效率的技巧。但需正确恰当使用。本文探讨其机制、规则、常见错误及在实际开发中的应用。
Yeats_Liao
2025/01/06
1420
Java 静态导入:规则、实践与应用场景
17. Groovy 面向对象编程-类成员学习-第二篇
本篇文章为Groovy语言学习第十七篇,在上一篇针对类成员信息的学习了解了构造函数的多种模式,方法的创建方式,
zinyan.com
2022/12/08
4610
29. Groovy 语法-变量定义与多重赋值
本篇开始,将基于Groovy官方文档中的语义模块:Groovy Language Documentation (groovy-lang.org) 完整详细的学习Groovy语言的各种基本语义知识。
zinyan.com
2023/02/23
2.3K0
29. Groovy 语法-变量定义与多重赋值
JAVA入门学习四
描述:有个这个关键字就是让有包的类对调用者可见,不用写全类名了; 比如我们前面在进行Scanner类示例化的对象来接收用户输入;
全栈工程师修炼指南
2022/09/28
4760
JAVA入门学习四
19. Groovy 面向对象编程-注解学习
本篇为Groovy学习笔记第十九篇。分享关于注解的相关知识。Annotations(注解)。现在的各种开发语言可以说都有注解。
zinyan.com
2022/12/08
8050
28. Groovy 闭包知识学习-第三篇 终篇
本篇内容为Groovy学习笔记第28篇,继续学习闭包相关知识。前面介绍了闭包的创建与使用,以及闭包的委托等和授权策略。
zinyan.com
2023/02/23
9551
28. Groovy 闭包知识学习-第三篇 终篇
Java之static作用的全方位总结
 引用一位网友的话,说的非常好,如果别人问你static的作用;如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的;如果是说 可以构成 静态代码块,那别人认为你还可以; 如果你说可以构成 静态内部类, 那别人认为你不错;如果你说了静态导包,
小勇DW3
2018/08/30
1.6K0
Java之static作用的全方位总结
推荐阅读
相关推荐
14. Groovy 语言结构-脚本和类知识学习
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验