博主工作负责的微服务已经达到了十几个,每个微服务相互直接都是独立的,有独立的project,于是maven的依赖管理就很头疼了。每一个项目都需要添加自己的版本,还要互相比对,每次升级一些第三方依赖需要修改所有文件,于是产生了自己写parent的想法。
访问我的个人网站获取更多文章
问题
第一种思路是:自己写一个parent pom,使用dependencyManagement管理所有依赖的版本,通过maven install安装到本地仓库。之后在使用的地方设置parent为之前写的即可。
但是这样做存在一个问题,我使用了spring-boot-starter-parent, maven只允许存在一个parent。当然可以通过在项目中使用dependencyManagement解决,但是我想统一到一起管理。
第二个思路:将自己写的parent pom的parent设置为spring-boot-starter-parent即可解决上一个问题。注意:dependencyManagement中出现的每一个依赖,必须写明版本。当我的项目继承自己的parent的时候,也自动的继承了spring-boot-starter-parent,所以,依赖于spring-boot-starter-parent提供版本的项目,不比再写到dependencyManagement中。
思路二的问题是:我所有项目没有采用spring-boot-starter-web提供的tomcat容器,而是使用了jetty,包括我很多项目使用了一些相同的依赖,是否可以将这些依赖组合在一起,简化我的配置呢?
简而言之,我想做一个和spring一样的pom version管理。通过搜索和阅读maven的文档,我发现了一个概念:bom
构建自己的依赖库
bom:bill of materials,直译过来是物料清单,我们通过bom的方式构建自己的依赖管理。
创建bom
新建一个maven项目,pom.xml文件即我们的bom文件。
我们在bom文件中管理所有的子依赖集合项目,其本身不负责依赖版本的管理。bom文件的packaging属性为pom,dependencyManagement包含了所有的子依赖集合项目。
<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.test</groupId>
<artifactId>bom</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<properties>
<project1Version>1.0.0</project1Version>
<project2Version>1.0.0</project2Version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.test</groupId>
<artifactId>project1</artifactId>
<version>${project1Version}</