工作 MAVENMaven版本依赖问题
Nuyoah 原因
今天在适配Milvus数据源的时候,代码出问题了,问题是
Milvus中的一个依赖包中包含protobuf这个包,这个包的版本是3.24.0。
同时还有一个依赖forest-spring-boot-starter也包含protobuf这个包,版本是3.14.0,
但是milvus中使用MilvusClient在创建client连接的时候会需要protobuf3.24.0中的GeneratedMessageV3的isStringEmpty这个方法

但是protobuf 3.14.0中的GeneratedMessageV3没有isStringEmpty方法

由于Milvus是外部包引入的,所以会导致冲突将3.24.0转换成3.14.0
配置文件如下,这是工程A引入的依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <dependencies> <dependency> <groupId>org.example</groupId> <artifactId>nuyoah-framework</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>com.dtflys.forest</groupId> <artifactId>forest-spring-boot-starter</artifactId> <version>1.5.19</version> </dependency> <dependency> <groupId>org.example</groupId> <artifactId>nuyoah-blog</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>
|
这是工程nuyoah-blog引入的依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <dependencies> <dependency> <groupId>org.example</groupId> <artifactId>nuyoah-framework</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </dependency> <dependency> <groupId>io.milvus</groupId> <artifactId>milvus-sdk-java</artifactId> <version>2.5.3</version> </dependency> </dependencies>
|
由上面依赖发现,nuyoah-blog引入了milvus,而工程A引入了nuyoah-blog,从而工程A中也有milvus依赖,但是工程A在使用nuyoah-blog中调用milvus的操作的时候出现了问题
nuyoah中milvus想要调用protobuf3.24.0中的一些方法,但是工程A中只有protobuf3.14.0,所以有些方法没有

由图中可以看出,3.24.0被3.14.0覆盖了
总结
终其原因:项目A引入了依赖1,依赖1中包含依赖2,项目B引入了依赖3,依赖3也包含了依赖2,并且这两个依赖2版本不同,这时候项目A引入了项目B,导致依赖1中的依赖2,覆盖掉了依赖3中的依赖2,最后出现一些奇奇怪怪的问题
解决方法
排除A
将A中依赖1中的依赖2版本排除掉,引入依赖3中的依赖2的版本,这样项目A和项目B中的依赖2都是走项目A中的依赖版本信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <dependencies> <dependency> <groupId>org.example</groupId> <artifactId>nuyoah-framework</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>com.dtflys.forest</groupId> <artifactId>forest-spring-boot-starter</artifactId> <version>1.5.19</version> <exclusions> <exclusion> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>3.24.0</version> </dependency> <dependency> <groupId>org.example</groupId> <artifactId>nuyoah-blog</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>
|

使用dependencyManagement
使用dependencyManagement版本管理工具,将为指定的版本依赖指向管理工具中的依赖项
1 2 3 4 5 6 7 8 9
| <dependencyManagement> <dependencies> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>3.24.0</version> </dependency> </dependencies> </dependencyManagement>
|
