maven多模块依赖版本不一致问题
maven多模块依赖版本不一致问题
- 问题描述
- 问题分析
- 2.1 maven help插件分析
- 2.2 maven依赖树分析
- 2.3 父类定义版本
- 解决方案
- 4.项目pom
- 4.1 父类依赖
- 4.2 子模块test-common依赖
- 4.3 子模块test-web依赖
1. 问题描述
记录一个很有意思的问题,父工程A下边两个模块B与C,B依赖6.0.16.Final版本hibernate-validator,C依赖B,但是C中hibernate-validator版本竟然是6.2.0.Final。
如图所示:
2. 问题分析
原因是在父类spring-boot-starter-parent的spring-boot-dependencies中定义了hibernate-validator.version 版本号6.2.0.Final。
test-common中显示的指明了hibernate-validator版本号位6.0.16.Final,而在打包的时候仍然引用的是spring-boot-starter-paren父类中定义的版本号6.2.0.Final。
所以才会出现test-common中是6.0.16,test-web虽然引用了test-common,但是引用的并不是项目中的tets-common,而是打成jar包的test-common,而打成jar包的test-common依赖的是父类中定义的6.2.0版本。
这个可以通过mvnHelp或者打出mvn依赖树分析
2.1 maven help插件分析
打开pom文件,左下角txt切换到Dependency Analyzer
2.2 maven依赖树分析
## cd 到pom文件根目录,执行mvn dependency:tree > tree.txt
D:\work\ennwork\test\test-common>mvn dependency:tree > tree.txt
2.3 父类定义版本
父类pom
org.springframework.boot
spring-boot-starter-parent
2.5.2
spring-boot-starter-parent-2.5.2.pom
org.springframework.boot
spring-boot-dependencies
2.5.2
spring-boot-dependencies-2.5.2.pom,这个就是打包所引用的依赖。
5.4.32.Final <hibernate-validator.version>6.2.0.Final</hibernate-validator.version>
3. 解决方案
解决方案就是排除父类中定义版本的依赖,从新引入新版本依赖。当然也可以与父类版本依赖保持一致。
<dependency>
<groupId>com.example</groupId>
<artifactId>common-customize-core</artifactId>
<version>0.0.1-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
4.项目pom
4.1 父类依赖
<?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>
<groupId>com.example</groupId>
<artifactId>test</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>test</name>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.2</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<java.version>1.8</java.version>
<test-common.version>1.0.0-SNAPSHOT</test-common.version>
<rdfa.framework.version>1.4.0-RELEASE</rdfa.framework.version>
</properties>
<modules>
<module>test-common</module>
<module>test-web</module>
</modules>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
4.2 子模块test-common依赖
<?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>
<parent>
<artifactId>test</artifactId>
<groupId>com.example</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>test-common</artifactId>
<properties>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
<spring-boot.version>2.3.2.RELEASE</spring-boot.version>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.16.Final</version>
</dependency>
</dependencies>
</project>
4.3 子模块test-web依赖
<?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>
<parent>
<artifactId>test</artifactId>
<groupId>com.example</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>test-web</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>test-common</artifactId>
<version>1.0.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
还没有评论,来说两句吧...