Maven Bom 的使用
文章目录
- Maven Bom 的使用
- 概述
- BOM特点
- 优点
- 缺点
- Maven
- Maven 安装
- 安装步骤
- settingx.ml常用仓库地址
- Idea 使用maven常见坑
- SpringBoot 项目Bom使用案例
- 项目结构
- 主项目 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常用仓库地址
-
阿里云仓库
<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 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
<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 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 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
完整代码
- https://gitee.com/Marlon_Brando/zerocode-back-serve