Skip to content

基础

读音;maven[ˈmeɪvn] 专家;内行;

概念

诞生: Maven的创始人是Jason Van Zyl,诞生时间大概在2001年3月。Maven起源于Jakarta Alexandria项目,在2002年10月份左右Maven迁移到Turbine项目中继续发展。

简介: Maven 是一款基于Java平台的项目管理和整合工具,它将项目的开发和管理过程抽象成一个项目对象模型(Project Object Model 简称 POM)。开发人员只需要做一些简单的配置,Maven 就可以自动完成项目的编译、测试、打包、发布以及部署等工作。

底层: Maven 是使用 Java 语言编写的,并且依赖于Java运行环境( JDK 7.0 及以上),因此它和 Java 一样具有跨平台性,这意味着无论是在 Windows ,还是在 Linux 或者 Mac OS 上,都可以使用相同的命令进行操作。

作用

Maven的重要作用包括:

  • POM(Project Object Model): POM是Maven项目的核心,它是一个XML文件,描述了项目的配置信息,如项目依赖、构建目录、插件等。POM文件位于项目根目录下的pom.xml文件中。
  • 依赖管理:Maven能够自动下载并管理项目的依赖,避免了手动下载和配置的复杂性。
  • 项目管理:Maven还提供了项目的知识管理功能,如管理项目相关的其他内容,如开发者信息、版本等。
  • 生命周期和阶段(Lifecycle and Phases): Maven定义了一组标准的生命周期,支持多种构建任务,如编译、测试、打包等。,如clean、validate、compile、test、package等,每个生命周期包含多个阶段。在构建项目时,可以执行某个特定生命周期的某个阶段,Maven会按照生命周期的定义顺序执行相应的阶段。
  • 仓库(Repository): 仓库是Maven存储依赖库和插件的地方。Maven中有本地仓库和远程仓库。本地仓库位于本地文件系统中,用于存储项目依赖的本地副本。远程仓库位于网络上,用于存储公共的依赖库和插件。
  • 聚合(Aggregation): Maven支持将多个子项目聚合成一个大项目进行管理。这种方式可以简化多模块项目的构建和管理。
  • 跨平台:Maven是跨平台的,可以在不同的操作系统上使用相同的命令。

Maven的这些特性使得它成为了一个在Java项目中广泛使用的项目管理工具。

下载

官网地址

目录

image-20240610221558935

bin:含有maven的运行脚本

boot:含有plexus-classworlds类加载器框架

conf:含有maven的核心配置文件

lib:含有maven运行所需要的java类库

LICENSE、NOTICE、README.txt:针对maven版本简要介绍

工作原理模型图

  • maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)

  • POM(Project Object Model):项目对象模型

image-20220724170237957

仓库

image-20220724175356377

  • 本地仓库:先会在本地仓库中查找所需的依赖项和插件。如果本地仓库中不存在所需的依赖项或插件,Maven会从远程仓库下载并将其存储在本地仓库中。在Maven的配置文件(settings.xml)中进行配置。
  • 远程仓库:远程仓库是存储在网络上的仓库,可以由中央仓库、私服仓库和其他公共远程仓库等组成。当Maven在本地仓库中找不到所需的依赖项或插件时,它会从远程仓库中下载。远程仓库的位置需要在Maven的配置文件中进行配置。
  • 私服仓库:私服仓库是一种特殊的远程仓库,通常由公司内部维护。私服仓库可以作为公司内部构件的共享存储库,也可以作为公用类库的镜像缓存,减少在外部访问和下载的频率。如gitee、gitlab
  • 中央仓库:中央仓库是由Maven团队维护的远程仓库,它包含了世界上大部分流行的开源项目的构件。中央仓库包含了大量的常用依赖项和插件,因此它是最常用的远程仓库之一。

坐标

maven中坐标用于描述仓库中的位置

https://repo1.maven.org/maven2/

组成

  • groupId:隶属组织名称(通常是域名反写,例如:org.mybaties)或com.公司/BU.业务线(子业务线),最多4级,子业务线可选

  • ArtifactId:项目名称(通常是模块名称,例如CRM、SMS)或产品线-模块名

  • version:项目版本号,主版本号-次版本号-修订版本号

    • 主版本号:做了不兼容的API修改,或者增加了能改变产品的方向的新功能

    • 此版本号:做了向下兼容的功能性新增(新增类和接口等)

    • 修订号:修复bug,没有修改方法签名的功能

      例如:初始 1.0.0 -> 修改bug -> 1.0.1 功能调整 -> 1.1.1