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

【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.0modelVersion>

<groupId>com.companyname.project-groupgroupId>

<artifactId>projectartifactId>

<version>1.0.0version>


<packaging>jar/pom/warpackaging>

三、Maven 工程依赖管理配置

1、依赖配置


<dependencies>
    
    <dependency>
        <groupId>log4jgroupId>
        <artifactId>log4jartifactId>
        <version>1.2.17version>
        
        <scope>runtimescope>
    dependency>

dependencies>

2、版本统一声明和使用


<properties>
  
  <junit.version>4.12junit.version>
  
  <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
properties>

<dependencies>
  <dependency>
    <groupId>junitgroupId>
    <artifactId>junitartifactId>
    
    <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.alibabagroupId>
      <artifactId>druidartifactId>
      <version>1.2.8version>
    dependency>
    

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

【Maven】005-基于 IDEA 进行 Maven 依赖管理_第1张图片

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


<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/javadirectory>
            <includes>
                
                <include>**/*.xmlinclude>
            includes>
        resource>
    resources>
build>

3、配置依赖插件

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

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

<build>
  <plugins>
      
      <plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-compiler-pluginartifactId>
        <configuration>
          <source>1.8source>
          <target>1.8target>
          <encoding>UTF-8encoding>
        configuration>
      plugin>
      
      <plugin>
        <groupId>org.apache.tomcat.mavengroupId>
        <artifactId>tomcat7-maven-pluginartifactId>
         <version>2.2version>
          <configuration>
          <port>8090port>
          <path>/path>
          <uriEncoding>UTF-8uriEncoding>
          <server>tomcat7server>
        configuration>
      plugin>
    plugins>
build>

你可能感兴趣的:(Maven,maven,intellij-idea,java)