问题

本地想起一个Spring AI项目,仓库配的阿里云中央仓库,参考了Spring AI的官方文档,但依赖配置一直下载失败。问了AI没有很好的解决,花了一些时间解决才发现问题竟然如此简单。记录一下解决过程。

避雷文档:https://docs.spring.io/spring-ai/reference/getting-started.html

可以参考,不能完全照搬,它不是最新的,而且不针对国内的情况。

遇到的报错: 

[ERROR]     'dependencies.dependency.version' for org.springframework.ai:spring-ai-starter-model-google-genai:jar is missing.

实际上其他依赖包的报错原因也是一样的。

解决

原因是依赖包的版本丢失了。上文的Spring官方提供了两条信息:

1. 1.0.0-M6, releases are available in Maven Central. 后面Milestone版本的Spring AI都可以在Maven 中央仓库找到,不用改Maven settings.xml的配置。(如果要用快照版本貌似需要改动,我一般不用快照版本,所以没改)。这里注意,它不一定在Aliyun的中央仓库,因为在国内一般都是配了镜像的。你的镜像仓库不一定和Maven 的中央仓库完全同步。

2. The Spring AI Bill of Materials (BOM) declares the recommended versions of all the dependencies used by a given release of Spring AI. Spring推荐用BOM管理依赖的版本。也就是说你要在pom文件中下载这个spring-ai-bom依赖,而它的版本决定了所有Spring AI 依赖是使用什么版本的。后面在引入相应的版本时,不需要显示地声明版本。

基于以上,问题的解决思路就是,把版本搞统一。这里有几处版本统一需要考虑的地方:

- Spring Boot版本与Spring AI BOM版本要兼容

- Spring AI BOM 版本要在阿里云仓库里有

- Spring AI 下面的所有依赖,例如我要用到的spring-ai-starter-model-google-genai 也需要在阿里云仓库里有和Spring AI BOM 版本一致的artifact

于是去这里搜就行了:阿里云仓库, 最终决定用了1.1.0-M4,至于Spring Boot的版本我是从高往下试的,发现3.5.6没有依赖问题就没继续改了。

理解

这个坑我觉得是我对于BOM的作用没有理解,之前也没有用过。于是向G老师学习了一下。

BOM是个版本控制工具,spring-ai-bom就是管理所有spring-ai groupId下面artifact版本的工具。它是<dependencyManagement>的一 部分。一旦导入,当前项目就知道所有 Spring AI 相关的 Artifact ID 应该使用的版本。而这些Artifact ID则不需要定义<version>标签

那么BOM是如何确定Artifact ID 应该使用的版本呢?

artifact版本号会从 BOM 中自动继承

当BOM 未正确加载时,Maven 无法确定版本,会抛出 version is missing 错误。

在 Spring AI 这种项目里,为了保证所有模块的完全兼容,通常 Starter 模块的版本会与 BOM 本身的版本号保持一致。这就是为什么如果 BOM 确定了某一版本,但依赖如 google-genai 在仓库里没有相同的版本,也会报version is missing 错误。

这是一般规律,实际上也可以通过查询bom的内容确认这一点,bom实际上是一个特殊的pom,其中定义了依赖的版本。

步骤:找到.m2/repository/org/springframework/ai/spring-ai-bom/1.1.0-M4的spring-ai-bom-1.1.0-M4.pom

查找依赖发现用的版本和bom版本一致,证实。

附录

Spring Boot 依赖:3.5.7

Java JDK 版本:21

Spring AI (BOM) 版本:1.0.0-M4

Maven 仓库:https://maven.aliyun.com/repository/central

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐