Maven 多项目依赖版本管理(Maven Multi Project version management)
2017-11-29 18:05
627 查看
博主工作负责的微服务已经达到了十几个,每个微服务相互直接都是独立的,有独立的project,于是maven的依赖管理就很头疼了。每一个项目都需要添加自己的版本,还要互相比对,每次升级一些第三方依赖需要修改所有文件,于是产生了自己写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文件中管理所有的子依赖集合项目,其本身不负责依赖版本的管理。bom文件的packaging属性为pom,dependencyManagement包含了所有的子依赖集合项目。
在你的其它的独立项目中,将上述的parent作为项目的parent,被parent中管理的依赖便不需要写版本了。也可以在dependencies中添加第三步的依赖集合,简化你项目的pom文件。
记住:在任何情况下,都可以使用dependencyManagement替代parent,关于二者的区别请读者自己搜索。
Maven 官方文档,本文代码出自官方文档(查询很久没有我想要的内容,结果偶然在官方文档找到了
Spring-Boot-Parent 项目地址,可以对比研究
Maven实战(三)——多模块项目的POM重构(这篇文章给了我启发,但是他的讲解还是不够详细,不能完全匹配我的问题
访问我的个人网站获取更多文章
问题
第一种思路是:自己写一个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}</version> </dependency> <dependency> <groupId>com.test</groupId> <artifactId>project2</artifactId> <version>${project1Version}</version> </dependency> </dependencies> </dependencyManagement> <modules> <module>parent</module> </modules> </project>
创建pom parent
创建一个子模块,parent为bom,这个模块负责所有的版本管理。在我的实际情况中,由于该文件已经有了parent,所以我把spring的parent也放在了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> <parent> <groupId>com.test</groupId> <version>1.0.0</version> <artifactId>bom</artifactId> </parent> <groupId>com.test</groupId> <artifactId>parent</artifactId> <version>1.0.0</version> <packaging>pom</packaging> <dependencyManagement> <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> </dependency> </dependencies> </dependencyManagement> <modules> <module>project1</module> <module>project2</module> </modules> </project>
创建依赖集合项目
这是具体的依赖集合,我们可以将几乎每个项目都有的依赖放在一起。<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> <parent> <groupId>com.test</groupId> <version>1.0.0</version> <artifactId>parent</artifactId> </parent> <groupId>com.test</groupId> <artifactId>project1</artifactId> <version>${project1Version}</version> <packaging>jar</packaging> <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </dependency> </dependencies> </project>
<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> <parent> <groupId>com.test</groupId> <version>1.0.0</version> <artifactId>parent</artifactId> </parent> <groupId>com.test</groupId> <artifactId>project2</artifactId> <version>${project2Version}</version> <packaging>jar</packaging> <dependencies> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </dependency> </dependencies> </project>
使用
在上述项目的根目录运行:mvn install 安装到自己的本地仓库。在你的其它的独立项目中,将上述的parent作为项目的parent,被parent中管理的依赖便不需要写版本了。也可以在dependencies中添加第三步的依赖集合,简化你项目的pom文件。
<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>use</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <parent> <groupId>com.test</groupId> <artifactId>parent</artifactId> <version>1.0.0</version> </parent> <dependencies> <dependency> <groupId>com.test</groupId> <artifactId>project1</artifactId> </dependency> <dependency> <groupId>com.test</groupId> <artifactId>project2</artifactId> </dependency> </dependencies> </project>
记住:在任何情况下,都可以使用dependencyManagement替代parent,关于二者的区别请读者自己搜索。
参考链接
我的GitHub:pom-starters(我实际项目中使用的,可以直接mvn install,作为参考)Maven 官方文档,本文代码出自官方文档(查询很久没有我想要的内容,结果偶然在官方文档找到了
Spring-Boot-Parent 项目地址,可以对比研究
Maven实战(三)——多模块项目的POM重构(这篇文章给了我启发,但是他的讲解还是不够详细,不能完全匹配我的问题
相关文章推荐
- 解决Maven项目中的错误:Cannot change version of project ...
- Making Project Management easy as 1-2-3 简单进行项目管理
- 从初识Maven到使用Maven进行依赖管理和项目构建
- maven管理项目如何查找jar依赖
- Maven 多模块项目的版本管理
- 已经使用ant的项目如何利用maven来管理依赖
- 使用maven构建项目和管理依赖
- Maven管理项目的时候 Update Project后jre变成1.5
- maven项目Cannot change version of project facet Dynamic Web Module to 2.5.
- 通过Maven的版本管理来管理项目公共模块
- Eclipse移植项目时JDK版本不匹配Project facet Java version 1.7 is not supported
- 从初识Maven到使用Maven进行依赖管理和项目构建
- spring maven项目解决依赖jar包版本冲突方案
- 关于maven项目的Cannot change version of project facet ...和Java compiler level does not match the version
- Maven项目,右键-update project后JRE system Library变成eclipse默认的版本
- Maven项目导入问题:Cannot detect Web Project version 解决方法
- Maven解读:项目依赖管理如何优化
- maven管理项目如何查找jar依赖
- Eclipse打war包方法以及Eclipse移植项目时JDK版本不匹配Project facet Java version 1.7 is not supported
- Mapreduce部署与第三方依赖包管理【hadoop mapreduce第三方jar包maven管理瘦身版本和臃肿版本各取所需】