1.第一步
2.第二步
3.第三步构建子项目
依赖管理(聚合)
依赖管理的作用
Maven提供了强大的依赖管理功能。通过在POM文件中声明项目所依赖的外部库和组件,Maven可以自动下载这些依赖项,并确保它们的版本和传递依赖项的一致性。这样可以避免手动管理JAR包和其他依赖项的麻烦,确保项目的构建和部署过程更加可靠和高效。
Maven的依赖管理功能包括以下几个核心方面:
- 依赖声明:
在项目的POM(Project Object Model)文件中,开发者可以明确列出项目所依赖的外部库和组件。每个依赖项通常由三个主要信息组成:groupId、artifactId和version。例如:
xmlCopy Code<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.10</version>
</dependency>
<!-- 其他依赖项 -->
</dependencies>
这些信息告诉Maven需要下载并集成Spring框架的核心模块(groupId为org.springframework,artifactId为spring-core,版本为5.3.10)到项目中。
- 依赖解析和下载:
当Maven执行项目构建时,它会自动解析POM文件中列出的所有依赖项。Maven会检查本地仓库(通常位于用户主目录下的.m2目录)是否已经存在这些依赖项的本地副本。如果没有,Maven会尝试从配置的远程仓库(如Maven中央仓库、公司内部仓库等)下载所需的依赖。
2.依赖传递性:
Maven能够自动处理依赖的传递关系。如果项目依赖于A库,而A库本身依赖于B和C库,Maven会递归地解析和下载B和C库,确保所有的依赖项都能正确集成到项目中,并且保持版本的兼容性3
3.依赖范围:
Maven允许开发者为每个依赖项指定特定的范围(scope),以控制依赖项在项目的不同阶段和环境中的使用情况。常见的依赖范围包括:
compile:默认范围,表示依赖项在编译、测试、运行阶段都可用。test:表示依赖项仅在测试编译和执行测试时使用,不会被打包到最终的发布包中。provided:表示依赖项由运行时环境(如Servlet容器)提供,不需要包含在最终的发布包中
4.依赖冲突解决:
当项目中存在多个依赖项,且它们依赖于同一个库的不同版本时,Maven会尝试通过依赖树的分析,解决版本冲突问题。通常情况下,Maven会选择最近的版本来满足所有依赖项的需求,从而保证项目的稳定性和可靠性
必选依赖
<!--必选依赖-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>3.3.0</version>
</dependency>
</dependencies>
可选依赖
<!--可选依赖-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
自定义管理依赖(在可选依赖的基础上更好的去管理依赖的版本号)
<!--自定义管理依赖-->
<properties>
<junit.version>4.13.2</junit.version>
</properties>
<!--可选依赖-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version> <!-- 使用属性来引用版本号 -->
<scope>test</scope>
</dependency>
<!-- 可以继续添加其他的依赖管理 -->
</dependencies>
</dependencyManagement>
scope
scope(作用域)通常指定了依赖项在项目中的有效范围或者生命周期。具体来说,它可以影响依赖项的可见性、访问权限以及在项目中的使用方式
项目构建(继承)
项目构建的作用
Maven能够自动化项目的构建过程,包括编译源代码、打包、运行单元测试、生成文档等。通过定义项目对象模型(POM)文件,Maven可以配置项目的构建细节和依赖关系。它利用约定优于配置的原则,使得开发者可以专注于项目的开发而不用过多关注构建过程的细节。
Maven在项目构建管理中扮演了以下几个重要角色:
编译代码:
Maven能够自动编译项目的源代码。开发者只需执行简单的命令(如 mvc compile),Maven就会根据项目的结构和配置,自动查找并编译所有的Java源文件。
- 打包项目:
一旦代码编译完成,Maven可以根据配置将编译后的代码打包成可执行的JAR文件、WAR文件或其他需要的分发格式。通过简单的命令(如mvc package),Maven会执行打包过程,将编译后的代码打包成指定格式,并放置在指定的目录中。
2.运行单元测试:
Maven支持运行单元测试,并能够自动执行项目中定义的单元测试。开发者可以通过命令(如mvc test)来执行单元测试,Maven会自动查找并运行项目中所有的单元测试,并生成测试报告。
3.生成文档:
Maven能够根据项目中的注释和配置,自动生成项目的文档。通过命令(如mvc site),Maven会根据项目中的Javadoc注释和配置,生成项目文档,并将其发布到指定的目录中,方便团队成员和用户查阅。
4.生命周期管理:
Maven定义了一套标准的生命周期(Lifecycle),包括验证(validate)、编译(compile)、测试(test)、打包(package)、集成测试(integration-test)、验证(verify)、部署(deploy)等阶段。每个阶段都可以通过Maven提供的插件进行扩展和定制,使得项目的构建过程更加灵活和可控。