Maven Bom 的使用
文章目录
- [Maven Bom 的使用](#Maven Bom 的使用)
-
- 概述
- BOM特点
- Maven
-
- [Maven 安装](#Maven 安装)
-
- 安装步骤
- settingx.ml常用仓库地址
- [Idea 使用maven常见坑](#Idea 使用maven常见坑)
- [SpringBoot 项目Bom使用案例](#SpringBoot 项目Bom使用案例)
-
- 项目结构
- [主项目 zerocode-back-serve](#主项目 zerocode-back-serve)
- zc-dependency(第三方jar管理)
- 子模块zc-serve
- 子模块zc-database-model
- 遇到的问题
概述
Maven BOM
是一个概念,它用于管理项目依赖的版本。BOM
本身是一个特殊类型的POM(Project Object Model)
文件,它包含了一个或多个依赖项的版本信息,但不包含实际的依赖项。- 在
Maven
项目中,通常会有多个依赖项,这些依赖项可能有不同的版本,而且它们之间可能还有依赖关系。为了避免版本冲突和手动管理每个依赖项的版本,可以使用BOM
来统一管理这些依赖项的版本。 BOM
文件通常由框架或库的开发者提供,它包含了该框架或库所有依赖项的版本信息。在项目中使用BOM
时,只需要在依赖项中声明需要使用的依赖项,而不需要声明版本号,Maven
会自动根据BOM
文件中的版本信息来解析依赖项的版本
BOM特点
优点
-
版本管理:
BOM
允许您在一个地方集中定义所有相关依赖库的版本号,确保项目中使用的所有库具有一致的版本。 -
简化依赖管理:通过使用
BOM
,您可以简化项目的依赖管理,减少重复和混乱。 -
减少冲突:
BOM
可以帮助减少依赖库之间的版本冲突,因为所有依赖都使用相同的版本。
缺点
- 限制灵活性:
BOM
可能限制您在项目中使用不同版本的依赖库,因为所有依赖都将受到BOM
中定义的版本的约束。 - 增加复杂性:在某些情况下,
BOM
可能会增加项目的复杂性,特别是在处理特定依赖的特定版本时。 - 需要额外配置:为了使用
BOM
,您需要在项目中配置相应的依赖和插件,这可能需要一些额外的工作。
Maven
Maven 安装
安装步骤
- 下载
maven
配置环境变量,即可使用
settingx.ml常用仓库地址
-
阿里云仓库
xml<mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors>
Idea 使用maven常见坑
- Idea右侧
Profiles
下面的每个maven
项目报红,因为项目无法识别到当前的maven
项目,右键unlink maven projects
,点击加号重新添加项目。 - 编译的时候如果
class
文件中已经存在了,但是Idea
报找不到类并且报红,可以尝试上面的方法。或者清理Idea
的缓存重启。 - 当仓库中的
jar
包问题混乱时候,可以重新指定maven
的地址,重新拉去jar
包。
SpringBoot 项目Bom使用案例
项目结构
- 项目结构如图所示
主项目 zerocode-back-serve
-
通过
<modules>
指定主模块下面的子模块,通过dependencyManagement
引入所有的依赖管理器,在子模块中只需要写上需要用的依赖就可以 -
pom.xml
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lidong.zc</groupId>
<artifactId>zerocode-back-serve</artifactId>
<packaging>pom</packaging>
<version>${zerocode-back-serve-revision}</version>
<!-- 模块 -->
<modules>
<module>zc-serve</module>
<module>zc-database-model</module>
</modules>
<!-- 全局的版本指定 -->
<properties>
<!-- springboot 版本指定 -->
<springboot-version>3.0.0</springboot-version>
<!-- zc 后端服务的版本 -->
<zerocode-back-serve-revision>0.0.1-SNAPSHOT</zerocode-back-serve-revision>
<!-- zc dependency 的版本 -->
<zc-dependency>0.0.1-SNAPSHOT</zc-dependency>
</properties>
<dependencyManagement>
<dependencies>
<!-- 依赖 zc-dependency -->
<dependency>
<groupId>com.lidong.zc</groupId>
<artifactId>zc-dependency</artifactId>
<version>${zc-dependency}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- springboot dependecy -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${springboot-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
zc-dependency(第三方jar管理)
-
所有第三方
jar
的版本在这个模块指定,其它模块只需要引入需要的依赖即可 -
pom.xml
xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lidong.zc</groupId>
<artifactId>zc-dependency</artifactId>
<name>zc-dependency</name>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<description>jar包统一管理</description>
<properties>
<java.version>1.8</java.version>
<!-- 指定 jdk 版本-->
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<mybatis.version>2.1.0</mybatis.version>
<druid-version>1.2.11</druid-version>
</properties>
<dependencyManagement>
<dependencies>
<!-- mybatis 依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- duruid 依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid-version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
子模块zc-serve
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.lidong.zc</groupId>
<artifactId>zerocode-back-serve</artifactId>
<version>${zerocode-back-serve-revision}</version>
</parent>
<artifactId>zc-serve</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>zc-serve</name>
<description>zc-serve</description>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
</dependencies>
</project>
子模块zc-database-model
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.lidong.zc</groupId>
<artifactId>zerocode-back-serve</artifactId>
<version>${zerocode-back-serve-revision}</version>
</parent>
<artifactId>zc-database-model</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>zc-database-model</name>
<description>zc-database-model</description>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
</dependencies>
</project>
遇到的问题
1、子模块中Parent
模块的版本不一致报错: https://bbs.csdn.net/topics/618266039