1. Spring AI 依赖下载问题全解析
最近在尝试使用 Spring AI 的 OpenAI Starter 时遇到了几个棘手的问题,特别是依赖下载和 JDK 17 兼容性问题。经过一番折腾,终于找到了解决方案,这里把踩过的坑和解决方法详细记录下来,希望能帮到遇到同样问题的朋友。
1.1 第三方仓库配置失效问题
最开始的坑就是 spring-ai-openai-spring-boot-starter 依赖无法从阿里云仓库下载。这是因为 Spring AI 目前还处于里程碑版本(Milestone),默认的阿里云镜像仓库并没有同步这些预发布版本的依赖。
解决方案是在 pom.xml 中显式添加 Spring 的里程碑仓库:
xml复制<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
注意:仅仅在项目的 pom.xml 中添加仓库可能还不够,特别是如果你使用了公司内部的 Maven 镜像。这种情况下,你还需要检查 Maven 的 settings.xml 文件,确保没有强制覆盖仓库配置的镜像设置。
1.2 JDK 17 模块系统导致的启动问题
升级到 JDK 17 后,项目启动时遇到了如下错误:
code复制Internal error (java.lang.reflect.InaccessibleObjectException):
Unable to make protected void java.util.ResourceBundle.setParent(java.util.ResourceBundle) accessible:
module java.base does not "opens java.util" to unnamed module @bef2d72
这个问题是由于 JDK 17 强化的模块系统导致的。Spring Boot 3.x 虽然官方支持 JDK 17,但某些反射操作需要额外的模块开放权限。
解决方法是在启动时添加 JVM 参数:
code复制--add-opens java.base/java.util=ALL-UNNAMED
如果你使用 IDEA,可以在 Run/Debug Configurations 的 VM options 中添加这个参数。对于生产环境,记得在启动脚本中也加入这个参数。
实测发现,有时候不添加这个参数也能启动成功,但这是不稳定的。建议还是显式配置,避免生产环境出现随机问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Spring AI 集成完整指南
2.1 项目基础配置
首先确保你的项目使用正确的 Spring Boot 和 Spring AI 版本。以下是我的 pom.xml 关键配置:
xml复制<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.5</version>
</parent>
<properties>
<java.version>17</java.version>
<spring-ai.version>1.0.0-M1</spring-ai.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</depende
