构建Apache PredictionIO推荐模板失败,遇依赖冲突与缺失问题
解决PredictionIO推荐模板构建中的Scala依赖冲突问题
看起来你在构建PredictionIO推荐模板时遇到了典型的Scala版本依赖冲突问题,我来帮你拆解原因并给出具体的修复方案:
问题1:Scala 2.10.1下的Shapeless版本冲突
当你使用scalaVersion := "2.10.1"时,出现com.chuusai:shapeless的_2.10和_2.10.4后缀冲突,核心原因是:
- PredictionIO 0.12.0-incubating本身依赖的Shapeless是针对Scala 2.10系列构建的(后缀
_2.10) - Spark 2.1.1依赖的Shapeless则是针对Scala 2.10.4这个具体小版本构建的(后缀
_2.10.4) - Scala小版本的差异会导致Maven仓库中依赖的artifact名称后缀不一致,进而引发冲突
修复方案:
- 先将Scala版本从2.10.1升级到2.10.4(这是Spark 2.1.1官方推荐的Scala 2.10系列版本,和PredictionIO 0.12.0兼容性更好),修改
build.sbt:scalaVersion := "2.10.4" - 添加依赖强制规则,统一Shapeless的版本,彻底避免冲突:
这个版本是PredictionIO 0.12.0默认依赖的Shapeless版本,能同时兼容Spark 2.1.1和PredictionIO核心库。dependencyOverrides += "com.chuusai" %% "shapeless" % "2.3.1"
问题2:切换到Scala 2.11.18后找不到依赖
出现org.scala-lang#scala-library等依赖无法找到的问题,核心原因是:
PredictionIO 0.12.0-incubating官方只支持Scala 2.10.x版本,其发布的所有核心依赖包都是基于Scala 2.10构建的,没有针对Scala 2.11的适配版本,所以当你切换到Scala 2.11后,SBT无法在Maven仓库中找到对应的依赖artifact。
修复方案:
放弃使用Scala 2.11,回到Scala 2.10.x系列(推荐2.10.4),按照上面问题1的方案配置即可。
验证步骤
完成配置修改后,执行以下命令清理并重新构建:
pio clean pio build --verbose
这样应该就能解决你遇到的两个构建问题了。
内容的提问来源于stack exchange,提问作者gpd
相关产品推荐
相关产品推荐

