在现代软件开发中,项目管理变得至关重要。从依赖管理到构建流程,每个环节都直接影响到项目的质量和效率。在这个背景下,Maven以其强大的依赖管理、标准化的项目结构和自动化构建流程成为项目管理的得力助手。本文将深入探讨Maven的各个方面,帮助您更好地理解这个强大的工具。让我们一起探索Maven的世界,看看它是如何简化项目管理的。
Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和 依赖管理。
什么是构建?
指的是项目从编译、测试、运行、打包、安装 ,部署整个过程都交给maven进行管理,这个过程称为构建。
构建的常用命令
①clean清理:删除以前的编译结果,为重新编译做好准备。
②compile编译:将 Java 源程序编译为字节码文件。
③test测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
④package打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web 工程对应 war 包。
⑤install安装:在 Maven 环境下特指将打包的结果——jar 包或 war 包安装到本地仓库中。
为什么引入Maven?Maven的功能?
引入原因:Maven为开发人员提供了一种方便、快速、可靠的方式来构建和管理项目。它采用了一种系统化的方式来管理项目,使得开发人员可以更加高效地构建、测试、文档化和部署软件项目。
maven的功能:
所有IDE使用Maven构建的项目完全一样,可以大大提高项目的管理效率和代码的复用性。
Maven通过一个坐标系统准确地定位每一个构建(artifact),也就是通过一组坐标 Maven 能够找到任何一个 Java 类库。这使得开发人员可以方便地管理项目的依赖关系,避免了手动搜索和下载jar包的繁琐过程。
Maven提供了一系列的命令和插件,可以自动完成编译、测试、打包、部署等操作,大大简化了项目的构建流程。
Maven为每个项目提供统一的配置,使得开发人员可以更加方便地管理和维护项目。
Apache-maven-3.6.0下载地址:Index of /dist/maven/maven-3/
由于我使用的是2022版本的idea,仅支持maven3.8.1及以下版本,请读者自行找到对应的maven版本并进行下载.
解压后目录如下:
目录结构
bin:存放了maven的命令,比如我们前面用到的mvn tomcat:run
boot:存放了一些maven本身的引导程序,如类加载器等
conf:存放了maven的一些配置文件,如settings.xml文件
lib:存放了maven本身运行所需的一些jar包
maven环境变量配置参考以下博文
http://t.csdnimg.cn/7cWVb
- 本地仓库(local) :用来存储从远程仓库或中央仓库下载的插件和jar包,项目使用的一些插件或jar包,优先从本地仓库查找
- 远程仓库(remote):如果本地需要插件或者jar包,本地仓库没有,默认去远程仓库下载。一般都是一些其他公司提供的Maven仓库,如阿里云的
- 中央仓库(central):Maven团队维护,存储所有资源的仓库
- 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源
顾名思义,就是Maven在本地存储构件的地方。
maven的本地仓库,在安装maven后并不会创建,它是在第一次执行maven命令的时候才被创建
maven本地仓库的默认位置:无论是Windows还是Linux,在用户的目录下都有一个.m2/repository/的仓库目录,这就是Maven仓库的默认位置.
本地仓库的配置:
在某盘中新建一个文件夹,用作本地仓库,命名建议localRepository
在F:\software_java\apache-maven-3.6.0\conf\settings.xml文件中配置本地仓库位置(maven的安装目录下):打开settings.xml文件,配置如下:
提示:注意本地仓库的路径符号:使用/不能使用\
F:/localRepository
Maven 默认使用中央仓库作为远程仓库,缺点:速度慢(服务器在国外),在国内开发可以考虑换成阿里的镜像(国内服务器)代替中央。
在 settings.xml 下找到
alimaven
aliyun maven
https://maven.aliyun.com/nexus/content/repositories/central/
central
id:唯一标识一个镜像
- name:镜像名称
- url:镜像地址
- mirrorOf:代表一个镜像的替代位置,例如central就表示代替官方的中央仓库
注意:
Maven项目每次在pom.xml文件中添加jar依赖坐标时,都会先从本地仓库查找判断是否存在,如果本地仓库中没有指定坐标的jar,那么就自行到配置文件(安装包的conf目录中的settings.xml)中配置的远程仓库(默认配置的是中央仓库,也就是Maven公司的jar仓库)中下载,下载成功后将jar添加到本地仓库缓存(下次在其他项目中添加依赖时,就可以直接引用),然后引用到项目中
Maven中依赖下载失败的情况可能有多种原因,以下是一些常见的情况和相应的解决办法:
网络问题:
仓库地址问题:
依赖冲突:
代理和防火墙问题:
本地仓库问题:
版本号不正确或不存在:
镜像仓库问题:
一个Maven工程都有一个pom.xml文件,通过pom.xml文件定义项目的坐标、项目依赖、项目的信息、插件信息等。
以下代码列出了pom.xml中常见标签的解释
modelVersion: 指定当前 POM 的模型版本,通常这个值都是 4.0.0。
4.0.0
parent
: 指定项目的父项目。多模块项目或继承关系中常用。
groupId
: 定义项目属于哪个组。这通常是组织的唯一标识符,如公司的域名反转(如 com.example
)。
artifactId
: 定义项目的基本名称。
version
: 指定项目的版本。
org.springframework.boot
spring-boot-starter-parent
2.2.12.RELEASE
properties中用于定义一些属性,比如编译版本、编码格式以及一些依赖库的版本号。
8
8
UTF-8
2.2.2
1.2.11
5.1.38
dependencies
: 列出项目的所有依赖。
org.springframework.boot
spring-boot-starter-web
通过Maven的依赖管理对项目所依赖的jar包进行统一的管理。
Maven的生命周期被划分为三个内置的生命周期,分别是clean、default和site。每个生命周期都包含一系列的阶段,这些阶段按照特定的顺序执行,以完成项目的构建过程。
clean生命周期:用于清理项目构建过程中生成的文件。
default生命周期:用于项目的编译、测试、打包和部署等核心构建任务。
site生命周期:用于生成和发布项目的站点文档。
阶段的执行:在Maven的生命周期中,每个阶段都是按照顺序执行的。当执行某个阶段时,它之前的所有阶段都会被自动执行(除非明确指定跳过某些阶段)。这种机制确保了项目构建的有序性和完整性。
插件的绑定:Maven的生命周期本身并不执行任何具体的构建任务,而是通过插件来完成的。每个阶段都可以绑定一个或多个插件的目标(goal),插件目标是实际执行构建任务的单元。当执行某个阶段时,Maven会调用该阶段绑定的插件目标来完成相应的构建任务。
自定义生命周期:除了内置的生命周期外,Maven还支持自定义生命周期。开发人员可以根据项目的需求,定义新的生命周期和阶段,并绑定相应的插件目标。这提供了更大的灵活性和扩展性,以适应不同项目的构建需求。
maven管理项目生命周期过程都是基于插件完成的。
maven概念模型图:(图源:百度)
参考资料:
Maven详解之仓库------本地仓库、远程仓库 - duanxz - 博客园 (cnblogs.com)
http://t.csdnimg.cn/2JRlO
Maven的依赖管理机制、标准化项目结构以及自动化构建流程大大简化了项目的复杂性。在项目管理中,正确使用Maven可以显著提高开发效率,降低维护成本,使团队能够更加专注于业务逻辑的实现和创新.