晚上好,愿这深深的夜色给你带来安宁,让温馨的夜晚抚平你一天的疲惫,美好的梦想在这个寂静的夜晚悄悄成长。
目录
前言
1.1 概念
什么是 Maven?
Maven 的核心概念
1.2 maven依赖坐标
1.3 maven仓库
1.4 maven安装
1.5 maven常用命令
1.6 maven生命周期
1.7 IDEA中集成maven(重点)
1.关闭当前工程
2.找到全局配置
3.找到maven相关的配置
4.完成本机自己安装的maven的配置
1.8 maven项目创建与导入
1.8.1 maven项目创建
1.8.2 maven工程的导入
1.9 maven依赖配置
1.10 maven依赖范围
二、Maven的进阶
1.maven的分模块开发
2.maven继承
2.1 概念与使用
2.2 继承的内容
扩展介绍:
2.3 自定义属性
3.maven的聚合
如何使用聚合概念:
4. Maven继承和聚合的区别
继承(Inheritance)
聚合(Aggregation)
主要区别
在软件开发的日常工作中,有效的项目管理是确保项目成功的关键。Maven 是一个强大且广泛使用的项目管理工具,不仅仅是 Java 项目,它已经成为许多其他语言项目的选择。本文将深入探讨 Maven 的核心概念、工作原理及其在现代软件开发中的重要性。
一、Maven的基础使用
Maven 是一个基于项目对象模型(Project Object Model, POM)的构建工具,它主要用于自动管理和构建Java项目。通过 Maven,开发人员可以更轻松地管理项目的构建、报告和文档生成。来源于apache使用Java语言实现的。
项目对象模型(POM):
依赖管理:
传统使用jar包存在的问题: 1.下载麻烦, 2.项目体积变大,3.jar包冲突
生命周期和插件:
clean
、compile
、test
、package
等,每个阶段都与一个或多个插件相关联。插件提供了实现特定任务的能力,如编译代码、运行单元测试、打包应用程序等。maven的其中一个功能是依赖管理,maven官方维护了一个服务器,该服务器上存放了目前所有公共的开源的jar包,使用maven的依赖管理功能可以自动从该服务器上下载指定的jar包。
maven坐标的作用: 用于唯一的定位maven中的一个jar包
maven坐标的组成:
作用: 存储jar包的
分类:
链接: https://pan.baidu.com/s/1dpawKgfRT01Iv_Cn5bY4Ew?pwd=1234 提取码: 1234
1.解压资料中提供的maven安装文件到当前目录
2.把解压出来的文件夹拷贝到一个没有中文目录的文件夹中
3.配置本地仓库和镜像
在安装目录下提供了一个repository目录,该目录中我已经提前准备好了一些必须要使用的jar包(这些jar包将来使用的时候就无需去中央仓库下载)
在【安装目录/conf/settings.xml】配置文件中,进行配置本地仓库
在【安装目录/conf/settings.xml】配置文件中,进行配置镜像
4.配置环境变量
4.1 在用户变量中新建 MAVEN_HOME,变量的值就是maven的安装目录【bin目录的上一级目录】
4.2 在用户变量中的Path变量中,添加 %MAVEN_HOME%\bin
4.3 检测环境变量是否配置正确
1.在maven中,任何操作的背后,都是插件
2.在资料中,已经提前提供好了一个maven工程
验证命令:
注意:编译产生的内容在 当前工程的target目录中
分类:
清理生命周期:
clean
默认生命周期: 同一生命周期内,后面的命令执行,那么前面的命令会自动执行。
compile,test,package,install,deploy
站点生命周期:
site
1.创建项目
2.选择项目的类
3.填写当前工程详细信息
4.对pom.xml中的内容进行解释
注意:
在IDEA中,提供了maven操作的一些快捷面板,更好的操作和观察当前工程的maven的使用情况
位置: 需要在当前工程的pom.xml文件中完成配置
使用:
公司或者组织名 项目名 版本号 公司或者组织名 项目名 版本号
如果不知道依赖的坐标,可以上 https://mvnrepository.com/ 查找
注意: 当修改了pom.xml配置文件后,一定要记得刷新maven,这样配置才会生效(maven可以自动的帮你下载和加载指定的依赖)
com.itheima maven_p1 1.0-SNAPSHOT 17 17 org.slf4j slf4j-api 1.7.26 ch.qos.logback logback-core 1.2.3 ch.qos.logback logback-classic 1.2.3
验证jar包的可用性
maven的传递依赖
如果A.jar中依赖了B.jar, 当前工程中引入了A.jar,此时当前工程也会传递依赖于B.jar
概念: 依赖生效的阶段
阶段:
注意: 如果引入的依赖并没有指定依赖范围,那么默认在三个阶段全部生效
指定依赖的生效范围:
compile:
provided:
runtime:
test:
system:
import:
扩展:
maven继承:简化依赖配置,统一管理依赖,将公共的依赖提取和统一版本管理(版本锁定)。
公共提取的好处:将共性的属性和依赖抽取出来,提高代码的重用性。属性和依赖需要修改时,只需在一个地方(父类)进行修改,所有子类都会继承这一变更,减少了维护的工作量。
父工程的
版本锁定的好处:进行统一的版本管理,防止版本不一致引发的不必要的错误。
版本锁定的注意事项:这样只会加载版本,不会把依赖加载进去,谁用谁重写(并不需要指定版本)。
maven不支持多继承,支持多层继承。
依赖管理:
插件配置:
属性定义:
构建配置:
资源管理:
设置打包方式为pom的作用:
设置 Maven 项目的打包方式为 pom 主要代表这个项目本身不会生成可执行的 Jar 文件或者 War 文件,而是作为父项目。因为父类项目只用于来简化项目管理和构建过程,连src目录都没有,你就算打包也没有意义。
所以父工程的打包方式应该为pom,这样打包不会生成可执行的构建产物。
设置relativePath的作用:
relativePath元素用于指定当前项目与其父项目之间的相对路径。
如果父项目的 pom.xml 文件不在本地仓库中(例如,正在开发中),那么可以通过 relativePath 元素指定父项目的相对路径,使 Maven 能够直接在指定路径中找到父项目的 pom.xml 文件。如果不指定会现在仓库中找,找不到就会报错。
定义方式:在
标签中,通过标签声明。 使用方式:${属性名}。
简化配置管理: Maven的项目配置文件(pom.xml
)中可能会包含大量重复的信息,例如版本号、路径等。通过定义自定义属性,可以将这些重复的信息抽取出来,集中管理,从而简化配置,减少配置文件的冗余和错误。
提高可维护性: 当项目中需要更新或者修改某些共享的信息时,如果没有使用自定义属性,可能需要逐个修改每个使用到这些信息的地方,这样容易出错且费时费力。而使用自定义属性后,只需要修改定义属性的地方,所有引用该属性的地方都会自动更新,大大提高了项目的可维护性。
增强灵活性: 自定义属性使得项目配置更加灵活和可配置化。例如,在不同的环境(开发、测试、生产)中,可以通过修改属性值来适应不同的环境需求,而不需要修改大量的代码或配置文件。
提高可读性和可理解性: 使用自定义属性可以使项目配置文件更加清晰和易于理解。定义了适当命名的属性可以使配置文件中的意图更加明确,降低了理解和维护成本。
在 Maven 中,聚合(Aggregation)指的是将多个相关的 Maven 项目组织在一起,形成一个更大的项目,称为聚合项目或者父项目。聚合项目本身不包含实际的代码,它主要用来管理和组织其他子模块。这种模型使得你可以统一构建、测试、部署和发布多个相关的项目,从而提高项目管理的效率和一致性。
当一个模块需要打包的时候,需要想把父工程和依赖的工程打包才可以完成打包,相当麻烦。
maven聚合就是为了解决这个问题:
将多个模块组织成一个整体,同时进行Maven插件操作。让你实现项目一键构建、打包、安装等操作,因此我们无需根据依赖关系手动构建,直接在聚合工程构建即可(自动根据依赖关系构建,和顺序无关)。
创建聚合项目:
pom
作为项目的 packaging 类型,这样可以确保这个项目本身不包含任何实际的代码,只是用来管理其他子模块。定义子模块:
元素列出所有的子模块。例如: submodule1 submodule2
依赖管理:
统一构建管理:
mvn clean install
),Maven 将会递归地构建所有列出的子模块。这样可以确保所有子模块都被正确构建和部署,而不需要单独进入每个子模块目录执行构建命令。在 Maven 中,"继承"(inheritance)和"聚合"(aggregation)是两种不同的关系模型,用于管理多模块项目的依赖和结构。
继承指的是 Maven POM 文件之间的父子关系。在 Maven 中,可以通过定义一个父 POM(通常是一个空的 POM,或者只包含通用配置的 POM)来统一管理子项目的配置和依赖。父 POM 中定义的配置和依赖会自动应用到所有子模块中。这样做的好处是可以减少重复配置,统一管理项目中的共享配置和依赖,提高项目的维护性和一致性。
聚合指的是将多个 Maven 项目组织在一起形成一个更大的项目,通常是一个父项目(POM packaging)。聚合项目本身不包含实际的代码,它只是用来管理和组织其他子模块。通过聚合,可以将多个相关的项目(子模块)归为一体,方便统一构建、部署和管理。聚合项目的 POM 文件中指定了它所管理的子模块,因此它可以感知到哪些模块属于它的一部分。
管理范围:
POM 文件打包方式:
pom
,这表示它们本身不会生成可执行的 artifact,而是用来管理其他项目或模块。关系感知性:
综上所述,继承和聚合在 Maven 中是两种不同的管理和组织项目结构的方式,各自有其独特的作用和适用场景。