摘要:Java语言因丰富的依赖库和便捷的构建工具(如Maven和Gradle)已成为当今最流行的应用项目开发语言之一.然而,随着依赖库规模的持续增大,Java项目的依赖管理变得愈益复杂,也不断超越现有工具的管理能力,其潜藏问题容易在未预期情况下触发,严重影响当前项目及所在Java生态中其它项目的构建和运行,如造成构建错误、运行崩溃或语义冲突等后果.针对现有调研和技术工作对Java语言依赖管理问题分析不足的缺陷,本文提出依赖异味(Dependency Smell)的概念,统一建模此类问题,并对涉及Maven和Gradle构建工具所有类别的依赖管理问题开展大规模实证研究,分析来自开源社区(如GitHub)、官方文档(如Maven依赖管理手册)和系列调研及技术论文的各类依赖管理问题,最终总结出13类依赖异味,以及它们的触发根源和影响特征等.基于该实证研究发现,我们设计了面向Java项目依赖异味的统一检测算法,并实现了适配于Maven和Gradle构建工具的专项检测工具JDepAna.实验表明,对已知依赖异味,JDepAna达到95.9%的检测召回率,对新的上百个Java项目,JDepAna检测出30,689个依赖异味实例,从中选出360个实例,人工验证真阳率达到96.1%,其中进一步汇报48个实例给开发者,42个已被快速确认,21个已被及时修复,充分验证了我们Java依赖异味检测算法和工具的效果和实用性,以及对Java项目质量保障的有效支撑.