软件设计之Maven(2)
路线图推荐:
【Java学习路线-极速版】【Java架构师技术图谱】
尚硅谷新版Maven教程(高效入门maven,上手又快又稳)
资料可以去尚硅谷官网免费领取
学习内容:
- 依赖管理
- 版本统一及维护
- 依赖范围
- Build构建配置
- 依赖传递特性
1、依赖管理
- Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题,使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中,避免出现版本冲突和依赖缺失等问题。
- 通过定义 POM 文件,Maven 能够自动解析项目的依赖关系,并通过 Maven 仓库自动下载和管理依赖,从而避免了手动下载和管理依赖的繁琐工作和可能引发的版本冲突问题。
2、版本统一及维护
在 pom.xml 文件的 properties标签中,可以集中定义项目中所有依赖的版本号。这样一来,修改版本只需在一个地方进行,方便管理和维护。在依赖定义中,使用定义的属性来指定版本号。这样,若需要升级或降级版本,只需修改 中的值即可
- 版本升级: 当需要升级某个依赖的版本时,只需修改 properties中的对应项,其他地方自动更新。
- 一致性: 确保整个项目中的依赖版本保持一致,减少潜在的兼容性问题。
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>myapp</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
<commons-lang.version>3.12.0</commons-lang.version>
<spring.version>5.3.10</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</project>
3、依赖范围
在 Maven 中,依赖范围(Scope) 用于指定依赖的可见性和生命周期。通过定义依赖的范围,可以更精确地控制哪些依赖在项目的不同构建阶段可用。可以设置 对应jar包的作用范围:编译环境、测试环境、运行环境
4、Build构建配置
在 Maven 的 pom.xml 文件中,build标签用于配置与项目构建相关的设置和插件。以下是一些主要功能和可以配置的内容:
- 指定打包信息
- 设置资源和源文件
-
- 在 resources 标签中,你可以指定包含的资源文件的位置以及类型。这通常用于将配置文件、XML 文件、图片等非代码文件打包到最终的 JAR 或 WAR 中。
- 配置依赖插件
-
- 在 build标签内,可以定义多个插件。每个插件由 plugin 标签表示
设置资源和源文件案例
war包打包插件和jdk版本不匹配,就需要下载对应依赖插件,不然会报错
<build>
<!-- jdk17 和 war包版本插件不匹配 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
</plugins>
</build>
- directory: 指定要打包的资源所在的目录,这里是 src/main/java。
- includes: 指定要包含的资源类型,这里是所有 XML 文件 (**/*.xml)。
- 这个配置会让 Maven 在打包时,从 src/main/java 目录中查找所有以 .xml 结尾的文件,并将它们包含在最终的打包文件中。
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
6、依赖传递特性
Maven 依赖的传递特性是指当一个项目依赖于某个库时,该库所依赖的其他库也会自动被包含在项目的依赖中。这一特性简化了项目的依赖管理,使得开发者不必手动添加所有依赖的依赖。
- 直接依赖: 项目中直接声明的依赖。
- 传递依赖: 直接依赖所依赖的库,Maven 会自动处理。
依赖冲突
自动选择原则
- 短路优先原则(第一原则)
A—>B—>C—>D—>E—>X(version 0.0.1)
A—>F—>X(version 0.0.2)
则A依赖于X(version 0.0.2)。
- 依赖路径长度相同情况下,则“先声明优先”(第二原则)
A—>E—>X(version 0.0.1)
A—>F—>X(version 0.0.2)
在<depencies></depencies>中,先声明的(在A的pom.xml中E、F谁先声明),路径相同,会优先选择!
手动排除
<dependency>
<groupId>com.atguigu.maven</groupId>
<artifactId>pro01-maven-java</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
<!-- 使用excludes标签配置依赖的排除 -->
<exclusions>
<!-- 在exclude标签中配置一个具体的排除 -->
<exclusion>
<!-- 指定要排除的依赖的坐标(不需要写version) -->
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>