升级至sbt 1.0后如何迁移libraryDependencies定义?
迁移sbt 1.0的libraryDependencies定义
这个问题是sbt 1.x版本设置语法变更导致的——旧的<++=这类操作符已被废弃,取而代之的是基于.value的新语法来访问设置值。
正确的迁移写法
你需要通过.value显式获取dispatchVersion这个SettingKey的实际值,构建出依赖序列后,再用++=追加到libraryDependencies:
libraryDependencies ++= { // 取出dispatchVersion设置的真实值 val dv = dispatchVersion.value Seq( "net.databinder.dispatch" %% "dispatch-core" % dv, "net.databinder.dispatch" %% "dispatch-json4s-native" % dv ) }
针对dispatchVersion为Map类型的补充
你提到dispatchVersion的类型是SettingKey[Map[Symbol, String]],如果它存储的是多模块版本映射,需要从Map中取出对应Dispatch的版本号,示例如下:
libraryDependencies ++= { val versionMap = dispatchVersion.value // 假设Map中用Symbol `'dispatch'`存储版本号,可根据实际key调整 val dv = versionMap.getOrElse('dispatch, throw new IllegalArgumentException("Dispatch版本号未在映射中找到")) Seq( "net.databinder.dispatch" %% "dispatch-core" % dv, "net.databinder.dispatch" %% "dispatch-json4s-native" % dv ) }
旧写法报错的原因
sbt 1.0之后,++=操作符要求右侧是实际的Seq[ModuleID]实例,而非旧语法返回的sbt.Def.Initialize[Seq[ModuleID]]类型。通过.value我们能从SettingKey中提取出真实值,生成符合要求的依赖序列,从而解决Append.Values隐式缺失的错误。
内容的提问来源于stack exchange,提问作者Sunil
相关产品推荐
相关产品推荐

