基于IDEA 进行Maven依赖管理

1. 依赖管理概念

Maven 依赖管理是 Maven 软件中最重要的功能之一。Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题,使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中,避免出现版本冲突和依赖缺失等问题。

我们通过定义 POM 文件,Maven 能够自动解析项目的依赖关系,并通过 Maven 仓库自动下载和管理依赖,从而避免了手动下载和管理依赖的繁琐工作和可能引发的版本冲突问题。

总之,Maven 的依赖管理是 Maven 软件的一个核心功能之一,使得软件包依赖的管理和使用更加智能和方便,简化了开发过程中的工作,并提高了软件质量和可维护性。

2. Maven工程核心信息配置和解读(GAVP)

位置:pom.xml

<!-- 模型版本 -->
<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><!--打包方式默认:jarjar指的是普通的java项目打包方式! 项目打成jar包!war指的是web项目打包方式!项目打成war包!pom不会讲项目打包!这个项目作为父工程,被其他工程聚合或者继承!后面会讲解两个概念
-->
<packaging>jar/pom/war</packaging>

3. Maven工程依赖管理配置

位置:pom.xml

依赖管理和依赖添加

<!-- 通过编写依赖jar包的gav必要属性,引入第三方依赖!scope属性是可选的,可以指定依赖生效范围!依赖信息查询方式:1. maven仓库信息官网 https://mvnrepository.com/2. mavensearch插件搜索-->
<dependencies><!-- 引入具体的依赖包 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version><!-- 依赖范围 --><scope>runtime</scope></dependency></dependencies>

依赖版本统一提取和维护

<!--声明版本-->
<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>

4. 依赖范围

通过设置坐标的依赖范围(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 中。

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

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

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

解决方案:

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

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

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

    例如: pom.xml依赖

    <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version>
    </dependency>
    

    文件:

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

    cls 
    @ECHO OFF 
    SET CLEAR_PATH=D: 
    SET CLEAR_DIR=D:\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 
    

    image-20231021161615994

6. Maven工程Build构建配置

项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。

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

例如:

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

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

指定打包命名

<!-- 默认的打包名称:artifactid+verson.打包方式 -->
<build><finalName>定义打包名称</finalName>
</build>  

指定打包文件

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

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

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

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

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

<build><!--设置要打包的资源位置--><resources><resource><!--设置资源所在目录--><directory>src/main/java</directory><includes><!--设置包含的资源类型--><include>**/*.xml</include></includes></resource></resources>
</build>

配置依赖插件

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

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

<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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/146667.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个用于操作Excel文件的.NET开源库

推荐一个高性能、跨平台的操作Excel文件的.NET开源库。 01 项目简介 ClosedXML是一个.NET第三方开源库&#xff0c;支持读取、操作和写入Excel 2007 (.xlsx&#xff0c; .xlsm)文件&#xff0c;是基于OpenXML封装的&#xff0c;让开发人员无需了解OpenXML API底层API&#xf…

go语言 | 图解字节青训营抖音(一)

前言 本文大致介绍了本人及本人所在小组为第五届字节跳动青训营后端专场大项目需求 —— 「实现一个极简版抖音」的部分实现细节。 需求 本届后端青训营大项目要求实现一个极简版抖音的后端服务&#xff0c;该后端服务通过 HTTP 协议向已被设计好的前端 App 传递数据&#xf…

识别代理IP:保障网络安全的重要一环

在互联网的世界中&#xff0c;代理服务器被广泛用于隐藏用户真实IP地址&#xff0c;带来了一些挑战&#xff0c;特别是在网络安全和欺诈检测方面。本文将探讨如何识别代理IP&#xff0c;以确保网络的安全性和可靠性。 1. 代理IP的背景与用途 代理服务器是位于用户和目标服务器…

吉林省土木建筑学会建筑电气分会及吉林省建筑电气情报网学术交流年会-安科瑞 蒋静

11月9-10日&#xff0c;吉林省土木建筑学会建筑电气分会及吉林省建筑电气情报网学术交流年会在吉林长春隆重举办。安科瑞电气股份有限公司作为智慧用电产品供应商受邀参会&#xff0c;为参会人士展示了安科瑞能源物联网云平台、电力运维云平台、智慧消防云平台、预付费管理云平…

k8s_base

应用程序在服务器上部署方式的演变,互联网发展到现在为止 应用程序在服务器上部署方式 历经了3个时代1. 传统部署 优点简单 缺点就是操作系统的资源是有限制的&#xff0c;比如说操作系统的磁盘&#xff0c;内存 比如说我8G&#xff0c;部署了3个应用程序&#xff0c;当有一天…

时序预测 | Python实现ConvLSTM卷积长短期记忆神经网络股票价格预测(Conv1D-LSTM)

时序预测 | Python实现ConvLSTM卷积长短期记忆神经网络股票价格预测(Conv1D-LSTM) 目录 时序预测 | Python实现ConvLSTM卷积长短期记忆神经网络股票价格预测(Conv1D-LSTM)预测效果基本介绍程序设计参考资料预测效果 基本介绍 时序预测 | Python实现ConvLSTM卷积长短期记忆神…

springMVC学习笔记-请求映射,参数绑定,响应,restful,响应状态码,springMVC拦截器

目录 概述 springMVC做了什么 springMVC与struts2区别 springMVC整个流程是一个单向闭环 springMVC具体的处理流程 springMVC的组成部分 请求映射 RequestMapping 用法 属性 1.value 2.method GET方式和POST方式 概述 HTTP给GET和POST做了哪些规定 GET方式&…

基于模拟退火算法优化概率神经网络PNN的分类预测 - 附代码

基于模拟退火算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于模拟退火算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于模拟退火优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

电子眼与无人机在城市安防中的协同应用研究

随着城市化进程的快速推进&#xff0c;城市安全问题成为了人们关注的焦点。传统的安防手段已经无法满足现代城市复杂多变的安全需求。因此&#xff0c;结合电子眼与无人机技术&#xff0c;实现二者之间的协同应用&#xff0c;成为提升城市安防能力的重要途径。 一、电子眼与无人…

深度系统(Deepin)开机无法登录,提示等待一千五百分钟

深度系统&#xff08;Deepin&#xff09;20.0&#xff0c; 某次开机无法登录&#xff0c;提示等待一千五百分钟。 &#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f; 用电脑这么多年&#xff0c;头一回遇到这种…

数据结构第四课 -----线性表之队列

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

【Spring】AOP进阶-JoinPoint和ProceedingJoinPoint详解

文章目录 1. 前言2. JoinPoint简介3. 获取被增强方法的相关信息4. ProceedingJoinPoint简介5. 获取环绕通知方法的相关信息6. 总结 1. 前言 在Spring AOP中&#xff0c;JoinPoint和ProceedingJoinPoint都是关键的接口&#xff0c;用于在切面中获取方法的相关信息以及控制方法的…

【Linux】 uptime命令使用

uptime 正常运行时间提供以下信息的单行显示。当前时间、系统运行的时间、当前登录的用户数量以及过去1、5和15分钟的系统平均负载。 语法 uptimeuptime命令 -Linux手册页 作者 由Larry Greenfield编写和迈克尔K约翰逊编写。 命令选项及作用 执行令 man uptime 执行命令结…

周年纪念篇

一周年纪念&#xff01; 凌晨逛手机版csdn时才突然发现已经错过一周年了&#xff0c;但我当闰年来纪念一下不过分吧hhh 浅浅的整些怀念的东西吧&#xff01; 这是人生第一段代码&#xff1a;不是hello world写不起&#xff0c;而是纯爱单推人更有性价比。 有这段代码在&#x…

Kafka学习笔记(一)

目录 第1章 Kafka概述1.1 消息队列&#xff08;Message Queue&#xff09;1.1.1 传统消息队列的应用场景1.1.2 消息队列的两种模式 1.2 定义 第2章 Kafka快速入门2.1 安装部署2.1.1 集群规划2.1.2 jar包下载2.1.3 集群部署 2.2 Kafka命令行操作 第3章 Kafka架构深入3.1 Kafka工…

Pytorch plt.scatter()函数用法

一.scatter&#xff08;&#xff09;函数的定义 matplotlib.pyplot.scatter(x, y, sNone, cNone, markerNone, cmapNone, normNone, vminNone, vmaxNone, alphaNone, linewidthsNone, vertsNone, edgecolorsNone, *, dataNone, **kwargs) 特征值作用x&#xff0c;y绘制散点图…

golang学习笔记——斐波纳契数列

斐波纳契数列 编写一个程序来计算某个数字的斐波纳契数列。 斐波那契数列是一个数字列表&#xff0c;其中每个数字是前两个斐波那契数字之和。 例如&#xff0c;数字 6 的序列是 1,1,2,3,5,8&#xff0c;数字 7 的序列是 1,1,2,3,5,8,13&#xff0c;数字 8 的序列是 1,1,2,3,5…

Python爬虫动态ip代理防止被封的方法

目录 前言 一、什么是动态IP代理&#xff1f; 二、如何获取代理IP&#xff1f; 1. 付费代理IP 2. 免费代理IP 3. 自建代理IP池 三、如何使用代理IP爬取数据&#xff1f; 1. 使用requests库设置代理IP 2. 使用urllib库设置代理IP 3. 使用selenium库设置代理IP 四、常…

人工智能基础_机器学习036_多项式回归升维实战3_使用线性回归模型_对天猫双十一销量数据进行预测_拟合---人工智能工作笔记0076

首先我们拿到双十一从2009年到2018年的数据 可以看到上面是代码,我们自己去写一下 首先导包,和准备数据 from sklearn.linear_model import SGDRegressor import numpy as np import matplotlib.pyplot as plt X=np.arange(2009.2020)#左闭右开,2009到2019 获取从2009到202…

Vim 从何而来?

Vim 编辑器的创造者、维护者和终身领导者 Bram Moolenaar 为了纪念这位杰出的荷兰程序员&#xff0c;我们今天来聊一聊 Vim 的历史。 Vim 无处不在。它被很多人使用。同时 Vim 可能是世界上 “最难用的软件之一” &#xff0c;但是又多次被程序员们评价为 最受欢迎的 代码编辑…