将Gradle从4.4升级至5.4后出现Joda-Time依赖问题
解决Gradle 5.4迁移后Joda-Time依赖缺失的编译错误
这问题我碰过好几次——Gradle版本升级后依赖解析逻辑变严格了,再加上你的子项目没显式声明Joda-Time依赖,才导致编译炸锅。直接给你搞定的步骤:
核心解决方案:显式添加Joda-Time依赖
在子项目的build.gradle的dependencies块里,加上Joda-Time的依赖声明。因为Gradle 5.x对传递依赖的处理更严谨,之前4.x可能通过某个依赖间接引入了Joda-Time,但升级后这个传递路径被截断或者规则变了,必须显式声明:
dependencies { implementation "com.t.com:x-core:1.0.0" implementation "commons-lang:commons-lang:2.6" // 新增Joda-Time依赖,版本选稳定版即可 implementation "joda-time:joda-time:2.10.14" }
为什么Gradle 4.x没问题,5.x就报错?
- Gradle 5.x默认启用了更严格的依赖解析策略,比如旧的
compile依赖范围被替换成implementation,如果父项目或其他依赖的配置有变化,间接依赖可能不再被自动引入。 - 你用的自定义插件
j-library或m-publish,在Gradle 4.x时可能隐含引入了Joda-Time,但升级到5.x后插件的行为有变化,不再自动添加这个依赖。
可选优化:统一依赖版本(如果有父项目)
如果你的大型项目有根项目的依赖管理(比如用platform或dependencyManagement插件),可以在根项目里统一声明Joda-Time的版本,子项目只需要写依赖名称不用带版本:
根项目build.gradle:
dependencyManagement { dependencies { dependency "joda-time:joda-time:2.10.14" } }
子项目里就可以简化成:
implementation "joda-time:joda-time"
改完之后重新执行./gradlew build,应该就能解决编译报错了。
内容的提问来源于stack exchange,提问作者Manoj Prasanna
相关产品推荐
相关产品推荐

