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

news2024/9/27 5:49:31

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

文章目录

  • 【Maven】005-基于 IDEA 进行 Maven 依赖管理
  • 一、Maven 依赖管理
  • 二、`GAVP` 再说明
  • 三、Maven 工程依赖管理配置
    • 1、依赖配置
    • 2、版本统一声明和使用
    • 3、依赖范围说明
    • 4、Maven工程依赖下载失败错误解决(重点)
      • 可能原因
      • 解决方案
  • 四、Maven 工程 Build 构建配置
    • 1、指定打包命名
    • 2、指定打包文件
    • 3、配置依赖插件

一、Maven 依赖管理

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

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

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

二、GAVP 再说明

<!-- 模型版本 -->
<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、依赖配置

<!-- 
   通过编写依赖 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、版本统一声明和使用

<!--声明版本-->
<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 无法正确地使用现有的依赖项。

解决方案

  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>
    

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

image_m3iQtBLARz

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

    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仓库的缓存文件):

    @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、指定打包命名

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

2、指定打包文件

如果在 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>

3、配置依赖插件

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.coloradmin.cn/o/1379954.html

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

相关文章

WAMP apache 无法启动(端口 80 未使用)

这段时间系统重装后&#xff0c;安装WAMP Server&#xff0c;装好后点击启动绿了下然后又变成了黄色&#xff0c;托盘图标无论是左键点击还是右键点击都没有反应&#xff0c;wampapache64服务也启动不起来&#xff0c;提示“windows不能在本地计算机启动wampapache”&#xff0…

Linux QT以太网配置及相关知识

Linux QT以太网配置及相关知识 平台和内容概述安装Qt Creator设计用户界面编辑源代码自定义LineEdit创建槽函数以太网逻辑功能实现静态配置ui逻辑:功能概述代码实现DNS退出程序输入框中的ip规范保存数据和读取数据构建文件编译运行平台注意点开机自动配置以太网总结平台和内容…

世界人口数据分析与探索

文章目录 世界人口数据集介绍数据集 1&#xff1a;世界国家统计数据&#xff1a;数据集 2&#xff1a;世界人口详细信息&#xff08;2023 年&#xff09;&#xff1a;数据集 3&#xff1a;按年份划分的世界人口&#xff08;1950-2023&#xff09;&#xff1a; 数据分析导入必要…

Linux中DNS域名解析服务及实验

一、DNS介绍 1、DNS 是域名系统&#xff0c;应用层协议&#xff0c;是互联网的一项服务&#xff0c;是将域名转换成网络可以识别的IP地址&#xff0c;再通过IP地址访问主机。这种由文字组成的名称更容易记忆。 DNS是“域名系统"的英文缩写。它作为将域名和IP地址相互映…

小学信息科技Python课程第2课:坐标与画笔

一、turtle画布与坐标系 在同一平面互相垂直且有公共原点的两条数轴构成平面直角坐标系。在坐标系中&#xff0c;水平方向的轴都称为x轴&#xff0c;垂直方向的轴都称为y轴 它们相交于O点&#xff0c;在这一个点里&#xff0c;x轴的值为0&#xff0c;y轴的值也为0&#xff0c;所…

解决SlF4J配置冲突警告:【SLF4J: Class path contains multiple SLF4J providers】

1、问题背景 最近在启动Springboot的时候出现了SLF4J相关的报红警告&#xff0c;虽然是不影响程序运行&#xff0c;但是作为一个有着代码洁癖的人看的是真难受。 警告信息如下&#xff1a; SLF4J: Class path contains multiple SLF4J providers. SLF4J: Found provider [ch…

WPF真入门教程27--项目案例--设备数据实时监测

1、上图看效果 今天要做的一个案例是这样的效果&#xff0c;它能实时监测车间设备有关数据&#xff0c;并以表格和图形显示在界面上&#xff0c;这个比上个案例要复杂些&#xff0c;颜值也高些&#xff0c;通过这个来巩固wpf的技能&#xff0c;用到了命令绑定&#xff0c;样式…

UCB Data100:数据科学的原理和技巧:第二十一章到第二十六章

二十一、SQL II 原文&#xff1a;SQL II 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 学习成果 介绍过滤组的能力 在 SQL 中执行数据清理和文本操作 跨表连接数据 在本讲座中&#xff0c;我们将继续上次的工作&#xff0c;介绍一些高级的 SQL 语法。 首先&…

PHP在线文档管理系统源码

PHP在线文档管理系统源码 系统功能与介绍 在数据持续、快速增长背景下&#xff0c;企业面临海量非结构化数据处理需求&#xff0c;企业现有架构 通常无法应对海量非结构化数据的管理与应用。 支持私有化部署&#xff0c;完全内网环境下也可正常使用。 Windows、Linux、Mac等全平…

Java异常处理--异常处理的方式1:try-catch-finally

文章目录 一、异常处理概述二、方式1&#xff1a;捕获异常&#xff08;try-catch-finally&#xff09;&#xff08;1&#xff09;抓抛模型&#xff08;2&#xff09;try-catch-finally基本格式1、基本语法2、整体执行过程3、try和catch3.1 try3.2 catch (Exceptiontype e) &…

OSG加载STL模型

下载了2个简单stl模型&#xff0c;用基本的加载代码&#xff1b;直接可以加载&#xff1b; 查一点资料&#xff1b; 怎样在OSG中添加支持STL格式的模型文件&#xff1f; 使用OSG时&#xff0c;如果需要导入STL格式的模型文件&#xff0c;需要添加STL插件。 可以通过在代码中调…

docker compose安装gitlab

环境 查看GitLab镜像 docker search gitlab 拉取GitLab镜像 docker pull gitlab/gitlab-ce 准备gitlab-docker.yml文件 version: 3.1 services:gitlab:image: gitlab/gitlab-ce:latestcontainer_name: gitlabrestart: alwaysenvironment:GITLAB_OMNIBUS_CONFIG: |external_url…

流量加密之OpenSSL反弹加密

目录 1、OpenSSL 简介 2、使用 OpenSSL 反弹加密 shell 3、使用wireshark抓包验证 4、搭建 HTTPS Server 1、OpenSSL 简介 OpenSSL 是一个强大的、商业级的、功能齐全的开源工具包&#xff0c;用于 TLS&#xff08;以前称为 SSL&#xff09;、DTLS 和 QUIC&#xff08;目前…

怎么把m3u8文件转换为mp4?方法很简单

怎么把m3u8文件转换为mp4&#xff1f;m3u8文件是一种特殊的媒体文件格式&#xff0c;通常用于在线流媒体服务&#xff0c;如HLS&#xff08;HTTP Live Streaming&#xff09;。这种格式在很多场合下都非常有用&#xff0c;比如在线视频播放、直播等。然而&#xff0c;有时候我们…

ubantu运维,nginx相关操作

1、使用 命令ps aux | grep nginx查找nginx 运行目录&#xff0c;如下图&#xff1a; 2、使用 ​​​​​​​命令cd /usr/sbin 切换到nginx 运行目录&#xff0c;如下图&#xff1a; 3、修改配置文件后&#xff0c;使用 nginx -t 命令测试nginx配置文件的语法是否正确&#x…

Mac M1 Parallels CentOS7.9 Install Jenkins

官网: https://www.jenkins.io/ 一、Install & Check Java Env Oracle官网下载Java: https://www.oracle.com/cn/ # 拷贝到Jenkins服务器 scp Downloads/jdk-8u391-linux-aarch64.tar.gz root10.211.55.34:~# 解压 mkdir -p /opt/java && tar -zxvf jdk-8u391-li…

2024最新外卖CPS分销微信小程序源码【前端+后台+数据库+分销功能】

内容目录 一、详细介绍二、效果展示三、源代码下载地址 一、详细介绍 外卖侠CPS全套源码是一款为外卖平台提供分销功能的微信小程序。用户可以通过你的链接去领取外卖红包&#xff0c;然后去下单点外卖&#xff0c;既能省钱&#xff0c;又能获得佣金。该小程序带有商城、影票、…

Java内置锁:深度解析lock和trylock

lock和tryLock是两种获取锁的方式&#xff0c;它们在处理并发问题时有所不同&#xff0c;lock是阻塞性的&#xff0c;确保只有一个线程能访问被锁资源&#xff0c;但可能导致线程长时间等待&#xff1b;而tryLock非阻塞性&#xff0c;若锁被占用则立即返回失败&#xff0c;避免…

大数据人工智能在线实习项目:某实习网站招聘信息采集与分析

01前置课程 Python编程基础 Python网络爬虫实战 Python爬虫环境与爬虫简介 网页前端基础 简单静态网页爬取 常规动态网页爬取 模拟登录 Python数据分析与应用、可视化 数据分析概述 Numpy数值计算 Pandas统计分析与数据预处理 Matplotlib可视化 Pyecharts绘图 02师…

【华为鸿蒙】HarmonyOS开发学习:下载与安装软件看这一篇就够了!

下载与安装软件 DevEco Studio 支持 Windows 和 macOS 系统&#xff0c;下面将针对两种操作系统的软件安装方式进行介绍 Windows 环境 运行环境要求 为保证 DevEco Studio 正常运行&#xff0c;建议您的电脑配置满足如下要求&#xff1a;  操作系统&#xff1a;Windows10 …