理解STS:Spring Boot应用STS运行正常但Gradle构建jar失败原因
问题解答
为什么STS可以正常运行未在build.gradle声明的依赖
- STS的项目运行类路径是独立于Gradle配置管理的:除了从
build.gradle同步过来的依赖项,STS还支持手动添加额外资源到项目的Java Build Path,包括本地jar包、自定义用户库、其他项目的编译产物、服务器运行时自带的依赖包等。这些额外添加的依赖只会保存在STS的项目私有配置文件(比如.classpath)中,不会同步写入build.gradle,因此Gradle命令行构建时感知不到这部分依赖的存在。最常见的场景就是开发阶段手动导入了第三方jar到STS构建路径,但没有在build.gradle中通过implementation files(...)/implementation fileTree(...)声明该本地依赖,就会出现开发正常、构建失败的问题。 - 部分场景下STS的Gradle插件缓存会保留历史依赖:如果你之前的项目配置中曾经声明过该依赖,后续删除
build.gradle中的依赖声明时没有触发STS的Gradle项目重新同步,插件缓存的旧依赖项仍然会留在STS的构建路径中,导致开发阶段可以正常引用。
STS和Gradle的依赖存储位置是否不同
默认情况下二者使用的依赖存储位置完全一致,都是指向Gradle全局缓存目录:
- Linux/macOS路径:
~/.gradle/caches/modules-2/files-2.1/ - Windows路径:
C:\Users\你的用户名\.gradle\caches\modules-2\files-2.1\
出现依赖差异的核心原因不是存储位置,而是二者的依赖准入规则不同:gradle build命令只会读取build.gradle、settings.gradle等官方配置文件中声明的依赖项,而STS的构建路径允许多个来源的依赖混合生效。
内容的提问来源于stack exchange,提问作者mAsK
相关产品推荐
相关产品推荐

