• Maven第三章:IDEA集成与常见问题


    Maven第三章:IDEA集成与常见问题

    前言

    本章内容重点:了解如何将Maven集成到IDE(如IntelliJ IDEA或Eclipse)中,以及使用过程中遇到的常见的问题、如何解决,如何避免等,可以大大提高开发效率。

    IEAD导入Maven项目

    1. File ->Open 选择上一章创建的Maven项目 my-app

    在这里插入图片描述

    1. 查看pom文件,可以看到我们定义的maven项目,项目的Maven坐标:groupId,artifactId,version.

    2. 点右边maven ,可以看到maven 对项目的生命周期管理

      Maven的生命周期是对所有的构建过程进行抽象和统一,包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤。

      具体来说,Maven的生命周期包含以下阶段:

      1. 清理(Clean):清理上一次构建生成的文件,包括编译的类文件和测试报告等。

      2. 初始化(Initialize):为构建过程准备环境,设置项目的属性,下载依赖项等。

      3. 编译(Compile):使用Java编译器将Java源代码编译成字节码。

      4. 测试(Test):使用测试框架运行单元测试和集成测试,验证代码的正确性和可靠性。

      5. 打包(Package):将项目打包成可分发的格式,例如JAR文件。

      6. 部署(Deploy):将打包后的项目复制到指定的目标仓库,以供其他项目使用。

    3. 选中 clean ,鼠标右键,选择 Run Maven Build

      在这里插入图片描述

    4. 以此类推,可以执行Maven生命周期的任何一个阶段。

    IEAD设置Maven 配置文件

    1. File ->Setting ,搜maven ,选中maven ,修改默认 setting.xml配置

    在这里插入图片描述

    1. Respositories 定义Maven依赖包、插件的仓库地址.优先级是本地,远程的优先级顺序

    在这里插入图片描述

    Maven仓库优先级

    1. Maven项目中的pom.xml文件定义的仓库,它包含了项目的坐标信息和依赖项配置。而settings.xml文件是Maven的全局配置文件,用于配置Maven的运行参数、镜像仓库等信息。
    2. Mavensettings.xml文件中,可以定义多个仓库的配置,每个仓库都有一个唯一的id标识。这些仓库的配置信息可以在Maven的运行过程中被使用到,例如在解析依赖项时。
    3. 关于仓库的优先级,Maven的默认策略是先从本地仓库中查找依赖项,如果找不到,则从中央仓库中查找。如果仍然找不到,则会从其他配置的远程仓库中查找。
    4. settings.xml文件中,可以通过设置元素来指定镜像仓库的优先级。该元素包含一个或多个元素,每个``元素指定一个镜像仓库的id、url和镜像名称等信息。通过调整这些元素的顺序和数量,可以改变Maven在解析依赖项时搜索的顺序和优先级。
    5. Maven项目中的pom.xml中也可以通过元素和元素来指定项目的依赖项仓库和插件仓库的优先级。这些元素的配置会覆盖settings.xml文件中的配置。
    6. 总体上,pom.xmlsettings.xml文件都可以配置仓库的优先级,而pom.xml文件的配置会覆盖settings.xml文件的配置。

    Maven常见错误

    1. 坐标报错:如果Maven无法从中央仓库或其他远程仓库下载所需的依赖项,就会报错。这可能是由于网络问题、依赖项的坐标描述错误或本地仓库中的依赖项缺失等原因引起的。
    2. pom文件开头报错:如果在pom.xml文件中存在错误或不规范的XML语法,Maven构建过程中就会出现错误。常见的错误包括缺少必要的信息(如groupId、artifactId、version等)、依赖项的坐标描述错误或XML文件结构问题等。
    3. 找不到对应的jar问题:如果在项目中使用了某个jar包,但Maven无法从中央仓库或其他远程仓库下载到该jar包,就会报错。这可能是由于网络问题、依赖项的坐标描述错误或本地仓库中的依赖项缺失等原因引起的。
    4. 多模块下存在依赖的模块提示找不到对应jar:在多模块项目中,如果某个模块依赖于另一个模块中的jar包,但无法找到该jar包,就会报错。这可能是由于项目结构问题、依赖模块的构建问题或模块之间的依赖关系配置错误等原因引起的。
    5. maven与jdk版本问题:Maven和JDK之间存在版本依赖关系,如果两者的版本不匹配,就会导致构建过程中出现错误。例如,如果Maven版本较旧,而JDK版本较新,可能会出现不兼容的问题。
    6. jar冲突问题:在项目中使用了多个版本的同一个jar包,就会产生jar冲突问题。Maven会尝试将所有的依赖项解析为同一版本,但如果有多个版本的同一个jar包存在,就会导致构建失败。
    7. 环境变量问题:如果Maven或JDK的环境变量没有正确配置,就会导致构建过程中出现错误。例如,如果M2_HOME环境变量没有正确配置,Maven就无法找到本地仓库的位置。
    8. 插件配置错误:如果在pom.xml文件中配置了错误的插件信息,就会导致构建失败。这包括插件的坐标信息错误、插件的配置信息错误或插件版本不兼容等问题。
    9. 依赖项循环引用问题:如果项目中的多个模块之间存在循环引用关系,就会导致构建过程中出现错误。Maven会尝试解析这些循环引用关系,但可能会出现无法解析的问题。
    10. 编码问题:如果在pom.xml文件中没有正确配置项目的编码信息,就会导致构建过程中出现编码错误。例如,如果项目的编码与Maven默认的编码不一致,就会导致解析XML文件时出现错误。
    11. 测试失败问题:如果项目中的测试用例失败,就会导致构建失败。这可能是由于测试用例本身的问题、依赖项的问题或环境配置问题等原因引起的。
    12. 权限不足问题:如果在构建过程中需要访问文件或目录时没有足够的权限,就会导致构建失败。例如,如果Maven没有权限访问本地仓库或项目目录下的文件,就会导致构建失败。
    13. 构建冲突问题:如果多个模块之间存在构建顺序冲突或依赖关系冲突,就会导致构建失败。例如,如果模块A依赖于模块B,但模块B又依赖于模块C,而模块C又依赖于模块A,就会形成一个构建冲突循环。

    坐标报错如何解决

    问题原因:
    1、国内访问maven默认远程中央镜像特别慢

    2、用阿里的镜像替代远程中央镜像

    3、大部分jar包都可以在阿里镜像中找到,部分jar包在阿里镜像中没有,需要单独配置镜像

    期望目标:
    在maven中配置一主一副两个镜像,大部分jar直接通过主镜像可以找到,部分特殊jar在主镜像中找不到时,自动去副镜像中寻找。

    maven的全局配置文件setting.xml

    1、配置了本地仓库:

    <localRepository>D:/maven/repositorylocalRepository>  
    
    • 1

    2、配置了中央仓库的镜像

          <mirror>
              <id>nexus-aliyunid>
              <mirrorOf>centralmirrorOf>
              <name>Nexus aliyunname>
              <url>http://maven.aliyun.com/nexus/content/groups/publicurl>
          mirror>
    
          
          <mirror>
              <id>central-repositoryid>
              <mirrorOf>*mirrorOf>
              <name>Central Repositoryname>
              <url>http://central.maven.org/maven2/url>
          mirror>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    知识点

    1. mirrors镜像的先后顺序

    2. mirrorOf为什么要配置为central

    mirrors镜像的先后顺序

    在 Maven 的 mirrors 标签中,镜像的先后顺序是有一定影响的。当配置了多个镜像时,Maven 会按照你配置的顺序逐个尝试从这些镜像仓库下载依赖项。

    如果你希望 Maven 先从特定的镜像仓库下载依赖项,你可以将该镜像的配置放在 mirrors 标签中靠前的位置。反之,如果你希望 Maven 最后从特定的镜像仓库下载依赖项,你可以将该镜像的配置放在 mirrors 标签中靠后的位置。

    举个例子,如果你有两个镜像,分别是 mirror1mirror2,你希望 Maven 先从 mirror1 下载依赖项,然后再从 mirror2 下载依赖项,那么你可以这样配置:

    <mirrors>  
      <mirror>  
        <id>mirror1id>  
        <url>http://mirror1.example.com/repo/url>  
        <mirrorOf>centralmirrorOf>  
      mirror>  
      <mirror>  
        <id>mirror2id>  
        <url>http://mirror2.example.com/repo/url>  
        <mirrorOf>centralmirrorOf>  
      mirror>  
    mirrors>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这个例子中,Maven 会先尝试从 mirror1 下载依赖项,如果失败了,才会尝试从 mirror2 下载。

    mirrorOf为什么要配置为central

    将 `` 配置为 central 的目的是为了镜像中央仓库(Central Repository)的所有内容。当 Maven 构建项目时,它会从中央仓库下载所需的依赖项。通过配置镜像,可以将对中央仓库的请求转发到另一个镜像仓库,从而加速依赖项的下载。

    标签中配置镜像时,可以指定一个或多个镜像,每个镜像有一个唯一的标识符(`id`)和一个指向镜像仓库的 URL(`url`)。 元素用于指定要代理的仓库。当配置为 central 时,表示该镜像将代理中央仓库的所有内容。

    使用镜像配置可以解决一些网络问题,例如中央仓库访问缓慢或不可用。通过将 `` 配置为 central,可以将请求转发到另一个镜像仓库,从而加速依赖项的下载。此外,如果中央仓库出现故障,可以使用镜像继续构建项目,确保 Maven 的构建过程不会受到影响。

    总之,将 `` 配置为 central 可以提高 Maven 构建的效率和可靠性。

    Jar冲突如何解决

    常用工具:

    1. Maven Helper插件:Maven Helper插件是一个用于解决Maven构建过程中问题的插件,其中包括jar冲突检测和解决。在IntelliJ IDEA中使用Maven Helper插件可以方便地查看冲突并解决它们。
    2. Maven Enforcer插件:Maven Enforcer插件用于校验项目中的约定遵守情况,包括jar版本的冲突。当存在jar冲突时,该插件会在构建时失败并提示冲突信息。
    3. Maven Dependency Tree插件:Maven Dependency Tree插件可以生成项目依赖树,以帮助用户查找和解决依赖项之间的冲突。
    4. JDepend工具:JDepend是一个用于分析Java EAR和WAR文件中的依赖关系的工具。它可以检测包之间的依赖关系和冲突,并提供度量标准以帮助评估软件的质量。
    5. SonarQube:SonarQube是一个用于代码质量管理的开源平台,可以检测代码中的漏洞、错误和代码异味。它还可以检测依赖项之间的冲突并给出建议。

    人工处理:

    1. 调整依赖项的版本:在pom.xml文件中,可以明确指定依赖项的版本,以避免不同模块之间的版本冲突。可以通过将依赖项的版本设置为固定值或使用最新的可用版本来解决版本冲突问题。
    2. 使用exclusions标签:在pom.xml文件中,可以使用exclusions标签来排除某个依赖项中的特定jar包。这样可以避免不同模块之间的jar包冲突。
    3. 升级Maven版本:有时候,Maven的版本过旧可能会导致jar冲突问题。可以尝试升级Maven版本,以解决与jar冲突相关的问题。
    4. 使用Maven的dependencyManagement标签:在pom.xml文件中,可以使用dependencyManagement标签来集中管理项目中的依赖项。通过指定每个依赖项的版本,可以确保所有依赖项都使用相同的版本,以避免版本冲突问题。
    5. 手动解决jar冲突问题:如果以上方法无法解决jar冲突问题,可以手动解决。首先确定哪些jar包存在冲突,然后尝试将其中一个jar包排除掉,再重新构建项目,检查是否还存在冲突问题。如果还存在问题,可以继续排除其他jar包,直到解决冲突问题为止。

    以上为大概思路,具体细节参考第五章

    在这里插入图片描述

  • 相关阅读:
    【MATLAB】PSO_BP神经网络回归预测算法(适用光伏发电回归预测等)
    简单学习OSM(OpenStreetMap)文件格式的最基础结构
    浅谈WPF之控件模板和数据模板
    【PAT甲级 - C++题解】1120 Friend Numbers
    Java项目:ssm毕业论文管理系统
    Cesium 实战 - 调整色调、对比度等参数,加载渲染暗黑底图
    ES6 入门教程 22 Class 的基本语法 22.9 静态属性 & 22.10 私有方法和私有属性
    Linux系统配置及服务管理-07-文件系统及RAID
    用 k8s+Ingress+Traefik 搭建一个外网可以访问的 Web 服务
    《网络协议》01. 基本概念
  • 原文地址:https://blog.csdn.net/RodJohnsonDoctor/article/details/134069013