深入了解Maven(一)

这篇具有很好参考价值的文章主要介绍了深入了解Maven(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

深入了解Maven(一),maven构建工具,maven,java

目录

一.Maven介绍与功能

二.依赖管理

1.依赖的配置

2.依赖的传递性

3.排除依赖

4.依赖的作用范围

5.依赖的生命周期


一.Maven介绍与功能

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

Maven的作用:

  • 便捷的依赖管理:使用Maven可以简化依赖管理过程。通过在项目的pom.xml文件中声明依赖关系,Maven可以自动下载所需的依赖库,并将它们添加到项目的类路径中。这消除了手动下载和配置jar包的繁琐过程,使依赖管理更加方便和可靠。

  • 统一的项目结构:Maven定义了标准的项目结构,规定了源代码、资源文件、测试代码等目录的布局方式。这使得不同IDE(如Eclipse、IntelliJ IDEA)之间可以共享和识别相同的项目结构,简化了项目之间的迁移和协作。

  • 标准的项目构建流程:Maven提供了一套标准化的项目构建流程。通过执行Maven命令,可以进行项目的编译、测试、打包、部署等一系列操作。这种标准化的构建流程确保了项目的一致性和可重复性,提高了开发效率。

深入了解Maven(一),maven构建工具,maven,java


二.依赖管理

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>

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

深入了解Maven(一),maven构建工具,maven,java


2.依赖的传递性

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

深入了解Maven(一),maven构建工具,maven,java

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

深入了解Maven(一),maven构建工具,maven,java

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

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

深入了解Maven(一),maven构建工具,maven,java

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

深入了解Maven(一),maven构建工具,maven,java 当然依赖可能会产生一个特殊情况,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>

深入了解Maven(一),maven构建工具,maven,java

 可以看到用了排除依赖后相关jar包就不存在了深入了解Maven(一),maven构建工具,maven,java


4.依赖的作用范围

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

作用范围:

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

深入了解Maven(一),maven构建工具,maven,java

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

深入了解Maven(一),maven构建工具,maven,java

案例:

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

深入了解Maven(一),maven构建工具,maven,java

 注意不要忘了点击更新

深入了解Maven(一),maven构建工具,maven,java

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

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

深入了解Maven(一),maven构建工具,maven,java

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

深入了解Maven(一),maven构建工具,maven,java


5.依赖的生命周期

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

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

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

 核心的生命周期阶段

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

深入了解Maven(一),maven构建工具,maven,java

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

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

运行指定的生命周期

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

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

深入了解Maven(一),maven构建工具,maven,java

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

深入了解Maven(一),maven构建工具,maven,java

周期跳过

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

深入了解Maven(一),maven构建工具,maven,java文章来源地址https://www.toymoban.com/news/detail-657234.html


到了这里,关于深入了解Maven(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 新一代构建工具 maven-mvnd

    maven 作为一代经典的构建工具,流行了很多年,知道现在依然是大部分Java项目的构建工具的首选;但随着项目复杂度提高,代码量及依赖库的增多使得maven在大型项目的构建的速度上被人诟病。 因此推出了gradle之类的项目,虽然gradle在构建效率是高于maven,但是在一般的小项

    2024年02月14日
    浏览(47)
  • [Maven-POM]你真的懂POM文件吗? | 一文带你深入了解POM.XML

    ⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:@逐梦苍穹 ⭐所属专栏:JavaEE ⭐如果觉得文章写的不错,欢迎点个关注一键三连😉有写的不好的地方也欢迎指正,一同进步😁 请查看我的这篇文章:[Java Web]Maven:一个管理和构建Java项

    2024年02月07日
    浏览(59)
  • 本地构建包含java和maven的镜像

    目录 1.前提条件 2.下载 2.1.创建Dockerfile 3.构建镜像 参考文章 本地环境需要的系统和软件 win10 + Docker Desktop + Powershell 图1 Win10安装Docker后,直接在Powershell使用Docker命令 有些Developer不习惯win10系统,却想要使用Linux,推荐以下方式 win10 + WSL2 + Ubuntu(截止202308最新版本是20.04.xx) +D

    2024年02月13日
    浏览(44)
  • 高效构建Java应用:Maven入门和进阶

    1.1 Maven介绍 https://maven.apache.org/what-is-maven.html Maven 是一款为 Java 项目构建管理、依赖管理的工具( 软件 ),使用 Maven 可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。 总结:Maven就是一个软件,掌握软件安装、配置、以及基本功能**(项目构建、依赖

    2024年02月02日
    浏览(41)
  • 高效构建Java应用:Maven入门和进阶(二)

    2.1 梳理Maven工程GAVP属性 Maven工程相对之前的工程,多出一组gavp属性,gav需要我们在创建项目的时指定,p有默认值,后期通过配置文件修改。既然要填写的属性,我们先行了解下这组属性的含义! Maven 中的 GAVP 是指 GroupId、ArtifactId、Version、Packaging 等四个属性的缩写,其中前三

    2024年02月01日
    浏览(49)
  • 高效构建Java应用:Maven入门和进阶(五)

    5.1 项目需求和结构分析 需求案例:搭建一个电商平台项目,该平台包括用户服务、订单服务、通用工具模块等。 项目架构: 用户服务:负责处理用户相关的逻辑,例如用户信息的管理、用户注册、登录等。 订单服务:负责处理订单相关的逻辑,例如订单的创建、订单支付

    2024年01月19日
    浏览(39)
  • 一、高效构建Java应用:Maven入门和进阶

    一、Maven简介和快速入门 1.1 Maven介绍 1.2 Maven主要作用理解 1.3 Maven安装和配置 二、基于IDEA的Maven工程创建 2.1梳理Maven工程GAVP属性 2.2 Idea构建Maven JavaSE工程 2.3 Idea构建Maven JavaEE工程 2.4 Maven工程项目结构说明 三、Maven核心功能依赖和构建管理 3.1 依赖管理和配置 3.2依赖传递和冲

    2024年02月08日
    浏览(40)
  • 高效构建Java应用:Maven入门和进阶(一)

    1.1 Maven介绍 Maven 是一款为 Java 项目构建管理、依赖管理的工具( 软件 ),使用 Maven 可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。 总结:Maven就是一个软件,掌握软件安装、配置、以及基本功能 (项目构建、依赖管理) 使用就是本课程的主要目标

    2024年01月25日
    浏览(74)
  • 使用Maven容器打包Java项目:一步步实现高效构建

    在Java开发中,使用Maven作为构建工具是一个普遍的选择。它提供了简单易用的方式来管理依赖、编译代码、运行单元测试并打包项目。本文将详细介绍如何使用Maven容器打包Java项目,让您的项目构建过程更加高效和可靠。 在开始之前,请确保您已经安装了Maven和Docker,并设置

    2024年02月13日
    浏览(47)
  • Java开发+Intellij-idea+Maven+工程构建

    Intellij-idea是一款流行的Java集成开发环境,它支持Maven作为项目管理和构建工具。Maven可以帮助开发者自动下载项目依赖的jar包,执行编译、测试、打包等生命周期任务。本资源将介绍如何在Intellij-idea中创建、导入、转换和编译Maven工程,以及如何配置Maven的相关参数和插件。

    2024年02月01日
    浏览(111)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包