maven简介及核心机制

99 阅读5分钟

maven简介

Maven 是一款为 Java 项目构建管理、依赖管理的工具,使用 Maven 可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。

maven提供了一种更为便捷的项目构建方式,相较于传统的手动导入依赖,maven可以根据已经编写好的配置信息在镜像仓库中下载项目所需要的依赖,在构建项目时无需手动导入依赖,只需编写配置文件即可。

maven的核心功能

1,依赖管理和配置

Maven 依赖管理是 Maven 软件中最重要的功能之一。Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题,使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中,避免出现版本冲突和依赖缺失等问题。

我们通过定义 POM 文件,Maven 能够自动解析项目的依赖关系,并通过 Maven 仓库自动下载和管理依赖,从而避免了手动下载和管理依赖的繁琐工作和可能引发的版本冲突问题。

示例:

<!--
   通过编写依赖jar包的gav必要属性,引入第三方依赖,依赖信息可以从官网查,也可以使用mavensearch插件获取。
   scope属性是可选的,可以指定依赖生效范围
   compile :main目录 test目录  打包打包 [默认]
   provided:main目录 test目录  Servlet
   runtime: 打包运行           MySQL
   test:    test目录           junit
  
 -->
<dependencies>
    <!-- 引入具体的依赖 -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
        
        <scope>runtime</scope>
    </dependency>

</dependencies>

在具体的项目中通常会将依赖的版本统一提出,便于维护

<!--声明版本-->
<properties>
  <!--命名随便,内部制定版本号即可!-->
  <junit.version>4.11</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>

依赖传递及依赖冲突

maven在下载相关的依赖时,如果依赖依赖其他的的依赖,maven就会将下载的依赖及其依赖的依赖一起下载下来,并且会保证依赖之间的版本不会有冲突

如果在下载的过程中遇到了重复的依赖下载就会停止依赖传递

依赖传递的作用:

  1. 减少重复依赖:当多个项目依赖同一个库时,Maven 可以自动下载并且只下载一次该库。这样可以减少项目的构建时间和磁盘空间。
  2. 自动管理依赖: Maven 可以自动管理依赖项,使用依赖传递,简化了依赖项的管理,使项目构建更加可靠和一致。
  3. 确保依赖版本正确性:通过依赖传递的依赖,之间都不会存在版本兼容性问题,确保依赖的版本正确性

2,构建管理

构建的概念:

项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。

主要场景:

  • 重新编译 : 编译不充分, 部分文件没有被编译!
  • 打包 : 独立部署到外部服务器软件,打包部署
  • 部署本地或者私服仓库 : maven工程加入到本地或者私服仓库,供其他工程使用

使用命令构建

打包: mvn clean package

重新编译: mvn clean compile

本地部署: mvn clean install

周期,命令和插件之间的关系:

周期→包含若干命令→包含若干插件

使用周期命令构建,简化构建过程

最终进行构建的是插件

maven工程继承关系

Maven 继承是指在 Maven 的项目中,让一个项目从另一个项目中继承配置信息的机制。继承可以让我们在多个项目中共享同一配置信息,简化项目的管理和维护工作。

工作机制:通过parent标签使得子工程继承于父工程,在继承于父工程后子工程就得到了父工程中的所有依赖信息,当然我们也可以在子工程中自己编辑依赖信息,如果与父工程有重复就会进行覆盖。在父工程中一般不引入依赖,只编写一些依赖的版本信息依赖的版本进行统一的规定,子工程只需在配置文件中填写groupid和artifactid即可引入相应的依赖

  1. 继承作用

    作用:在父工程中统一管理项目中的依赖信息,进行统一版本管理

    应用场景:

    • 多个模块要使用同一个框架,它们应该是同一个版本,所以整个项目中使用的框架版本需要统一管理。
    • 使用框架时所需要的 jar 包组合(或者说依赖信息组合)需要经过长期摸索和反复调试,最终确定一个可用组合。这个耗费很大精力总结出来的方案不应该在新的项目中重新摸索。

    通过在父工程中为整个项目维护依赖信息的组合既保证了整个项目使用规范、准确的 jar 包;又能够将以往的经验沉淀下来,节约时间和精力。

maven工程聚合关系

聚合概念: Maven 聚合是指将多个项目组织到一个父级项目中,通过触发父工程的构建,统一按顺序触发子工程构建的过程!!

聚合作用: 统一管理子项目构建:通过聚合,可以将多个子项目组织在一起,方便管理和维护。 优化构建顺序:通过聚合,可以对多个项目进行顺序控制,避免出现构建依赖混乱导致构建失败的情况。

实现:

<project>
  <groupId>com.example</groupId>
  <artifactId>parent-project</artifactId>
  <packaging>pom</packaging>
  <version>1.0.0</version>
  <modules>
    <module>child-project1</module>
    <module>child-project2</module>
  </modules>
</project>