深度了解Maven

简介: 一.Maven介绍与功能 二.依赖管理 1.依赖的配置 2.依赖的传递性 3.排除依赖 4.依赖的作用范围 5.依赖的生命周期

一.Maven介绍与功能

maven是一个项目管理和构建工具,是基于对象模型POM实现。

Maven的作用:

    • 便捷的依赖管理:使用Maven可以简化依赖管理过程。通过在项目的pom.xml文件中声明依赖关系,Maven可以自动下载所需的依赖库,并将它们添加到项目的类路径中。这消除了手动下载和配置jar包的繁琐过程,使依赖管理更加方便和可靠。
    • 统一的项目结构:Maven定义了标准的项目结构,规定了源代码、资源文件、测试代码等目录的布局方式。这使得不同IDE(如Eclipse、IntelliJ IDEA)之间可以共享和识别相同的项目结构,简化了项目之间的迁移和协作。
    • 标准的项目构建流程:Maven提供了一套标准化的项目构建流程。通过执行Maven命令,可以进行项目的编译、测试、打包、部署等一系列操作。这种标准化的构建流程确保了项目的一致性和可重复性,提高了开发效率。

    image.gif编辑


    二.依赖管理

    1.依赖的配置

    所谓的依赖指的就是当前项目所需要的jar包,一个项目可以引入多个jar包

    案例:导入多个包 mysql、ch.qos.logback两个包

    首先打开maven项目工程找到pom.xml

    设置依赖标签

    <!--    设置标签依赖-->
        <dependencies>
    <!--        设置具体依赖-->
            <dependency>
    <!--            配置代表项目或组织的唯一标识符-->
                <groupId>ch.qos.logback</groupId>
    <!--            配置代表特定项目的唯一标识符-->
                <artifactId>logback-classic</artifactId>
    <!--            配置版本号-->
                <version>1.2.3</version>
            </dependency>
    <!--        操作类似-->
            <dependency>
                <groupId>mysql-java</groupId>
                <artifactId>mysql-java</artifactId>
                <version>5.1.21</version>
            </dependency>
        </dependencies>

    image.gif

    如果以前没有使用过相关jar包,则会冒红报错,因为在本地仓库没有找到相关的jar包

    image.gif编辑


    2.依赖的传递性

    如果一个项目projectA依赖了一个A-jar包,而一个A-jar包中又依赖了其他的jar包,那么projectA对应的也就依赖了A-jar包对应的其他jar包

    image.gif编辑

    依赖传递有两种:一种是直接依赖,一种是间接依赖

    image.gif编辑

    通过图标形势查看依赖关系

    在pom中右键找到图再点击显示依赖项

    image.gif编辑

    这样就可以清晰看到项目之间的依赖

    image.gif编辑 当然依赖可能会产生一个特殊情况,A->B->A 循环依赖,项目A依赖了项目B,而项目B依赖了项目A。这种情况也是面试题常问的一个问题

    面试题:Maven中如何解决依赖循环的问题

      1. 重构代码结构:首先,我们可以检查项目结构并尝试重构代码以消除依赖循环。这可能需要重新设计模块之间的关系,将公共功能提取到独立的模块中,或者修改模块的依赖关系,以确保它们形成一个有向无环图(DAG)。
      2. 使用接口或抽象类:如果依赖循环是由于具体类之间的相互依赖引起的,我们可以考虑使用接口或抽象类来解耦它们。这样,依赖关系将变得单向,并且可以更容易地管理。
      3. 使用Maven插件:Maven提供了一些插件来帮助解决依赖循环问题。例如,可以使用Maven的maven-dependency-plugin来分析项目依赖关系,并找出导致循环的依赖。然后,我们可以使用excludeoptional标记,将其中一个模块的依赖排除或设置为可选,以打破循环。
      4. 模块拆分:另一种方法是将存在依赖循环的模块拆分为更小的、相互独立的模块。这样,我们可以将它们放在不同的项目中,并使用Maven的多模块项目进行管理。通过将功能划分到不同的模块中,可以更好地管理和控制它们之间的依赖关系。

      3.排除依赖

      由上面的内容可以知道依赖具有传递性,PorjectA项目会依赖A-jar包下的所有依赖jar包。但是如果明确知道工程ProjectA中只需要A-jar包,不需要A-jar包下的某一个包,则可以通过<exclustions>标签和<exclustion>实现排除依赖

      <exclusions>
         <exclusion>
               <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
          </exclusion>
       </exclusions>

      image.gif

      image.gif编辑

      可以看到用了排除依赖后相关jar包就不存在了image.gif编辑


      4.依赖的作用范围

      依赖的jar包,在默认情况下,可以在任何地方使用,或者也可以通过<scope></ scope>标签来设置相应jar包的作用范围

      作用范围:

        • 主程序范围有效(main文件夹内)
        • 测试程序范围有效(test文件夹范围内)
        • 是否参与打包运行(package指令范围内)

        image.gif编辑

        scope标签值与对应的作用范围

        image.gif编辑

        案例:

        设置logback的jar包的范围为test,实现只能在test测试程序中运行

        image.gif编辑

        注意不要忘了点击更新

        image.gif编辑

        接下来测试是否更改了作用范围:

        1.在test中使用logback的jar包对象,可以看到有提示相应的jar包

        image.gif编辑

        2.在main中使用则会发现并没有相应的jar包

        image.gif编辑


        5.依赖的生命周期

        在Maven中有三套相互独立的生命周期

          • clean 负责清理上一次编译产生的字节码文件
          • default 核心工作 负责编译、测试、打包、安装、部署等等
          • site 生成报告、发布站点等

          每一套生命周期都有许多的生命周期阶段,但是我们需要用到的生命周期并不需要太多,只需要掌握以下几个核心生命周期的阶段即可

          核心的生命周期阶段

            • clean 移除上一次构建生成的文件
            • compile编译项目的源代码
            • test使用合适的单元测试框架运行测试
            • package将编译后的文件进行打包
            • install安装项目到本地仓库

            image.gif编辑

            注意:同一套的生命周期的运行是由循序的,后面的生命周期的运行是需要依赖前面的生命周期的运行。所以如果使用后面的生命周期阶段,就会自动执行前面的生命周期

            比如运行test,会自动运行validate与compile,但是不会运行clean,因为clean与这些不是同一套的生命周期

            运行指定的生命周期

            有两种方式运行指定的生命周期

            第一种,找到右侧栏中的maven打开项目下的生命周期,找到对应周期双击运行即可

            image.gif编辑

            第二种,在idea或者cmd中输入指令 mvn xxx即可执行对应的生命周期阶段

            image.gif编辑

            周期跳过

            在工程文件中找到生命周期,找到小闪电图标,点击即可跳过对应的生命周期。

            image.gif编辑


            目录
            相关文章
            |
            Java Maven
            maven篇4:pom文件详解
            maven篇4:pom文件详解
            1037 3
            |
            存储 分布式计算 负载均衡
            【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)
            【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)
            2047 0
            |
            小程序
            【小程序】报错:no such file or directory, access ‘wxfile://usr/miniprogramLog/log2‘
            【小程序】报错:no such file or directory, access ‘wxfile://usr/miniprogramLog/log2‘
            2692 0
            |
            6月前
            |
            存储 弹性计算 人工智能
            阿里云服务器ECS计算型c9i实例规格族ecs.c9i.xlarge全解析(4核8G配置)
            阿里云ECS c9i.xlarge实例,4核8G,基于CIPU架构与Intel Xeon处理器,主频3.6GHz,适合计算密集型场景。具备4Gbps网络、5万IOPS(ESSD),支持AI推理、数据分析等高负载应用,安全可靠,弹性灵活。
            370 0
            |
            10月前
            |
            机器学习/深度学习 数据采集 缓存
            蛋白质结构预测:从AlphaFold到未来的计算生物学革命
            蒋星熠Jaxonic以“摘星者”视角,融合深度学习与几何工程,详解蛋白质结构预测的模块化实践。从序列到三维结构,贯穿可解释性、轻量架构与性能权衡,助力科研与工业落地。
            |
            Java 测试技术 数据库连接
            maven依赖详解
            maven依赖详解
            766 1
            |
            NoSQL 前端开发 MongoDB
            [保姆级教程]Windows安装MongoDB教程
            【6月更文挑战第4天】该内容是关于MongoDB的安装包下载及安装步骤指南。首先,访问网址 &lt;a href=&quot;https://www.mongodb.com/try&quot; target=&quot;_blank&quot;&gt;https://www.mongodb.com/try&lt;/a&gt; 进入官网,选择MongoDB Community Edition(社区版)。接着,挑选合适的版本和系统平台,推荐下载zip压缩包。下载后,进行安装,依次点击“Next”同意协议,选择自定义安装路径,然后继续安装直至完成。
            1864 0
            |
            NoSQL Redis 数据库
            Redis Windows版下载,带安装包
            文章提供了Windows版Redis的下载和安装指南,包括如何解压、启动Redis服务以及连接到Redis数据库。
            6466 0
            Redis Windows版下载,带安装包
            springboot 集成 swagger 2.x 和 3.0 以及 Failed to start bean ‘documentationPluginsBootstrapper‘问题的解决
            本文介绍了如何在Spring Boot项目中集成Swagger 2.x和3.0版本,并提供了解决Swagger在Spring Boot中启动失败问题“Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerEx”的方法,包括配置yml文件和Spring Boot版本的降级。
            springboot 集成 swagger 2.x 和 3.0 以及 Failed to start bean ‘documentationPluginsBootstrapper‘问题的解决
            |
            算法 Java Linux
            java制作海报五:java 后端整合 echarts 画出 折线图,项目放在linux上,echarts图上不显示中文,显示方框口口口
            这篇文章介绍了如何在Java后端整合ECharts库来绘制折线图,并讨论了在Linux环境下ECharts图表中文显示问题。
            654 1

            热门文章

            最新文章