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