SBT 多项目中未解决的依赖关系
Posted
技术标签:
【中文标题】SBT 多项目中未解决的依赖关系【英文标题】:Unresolved Dependencies in SBT Multi Project 【发布时间】:2016-06-04 20:55:23 【问题描述】:使用 sbt 13.8,IntelliJ 的最新 scala 插件,以及带有 Scala 2.11.7 的新 SBT 项目,我尝试添加一个库 - akka 2.4.2。在this之后,我简单地添加了
libraryDependencies += "com.typesafe.akka" %% "akka-actor" % "2.4.2"
但是我得到一个未解决的依赖错误:
错误:导入 SBT 项目时出错:
[信息] 解决 org.scala-sbt#tasks;0.13.8 ...
[信息] 解决 org.scala-sbt#tracking;0.13.8 ...
[info] 解决 org.scala-sbt#cache;0.13.8 ...
[info] 解决 org.scala-sbt#testing;0.13.8 ...
[info] 解决 org.scala-sbt#test-agent;0.13.8 ...
[info] 解决 org.scala-sbt#test-interface;1.0 ...
[info] 解决 org.scala-sbt#main-settings;0.13.8 ...
[info] 解决 org.scala-sbt#apply-macro;0.13.8 ...
[信息] 解决 org.scala-sbt#command;0.13.8 ...
[信息] 解决 org.scala-sbt#logic;0.13.8 ...
[info] 解决 org.scala-sbt#precompiled-2_8_2;0.13.8 ...
[信息] 解决 org.scala-sbt#precompiled-2_9_2;0.13.8 ...
[info] 解决 org.scala-sbt#precompiled-2_9_3;0.13.8 ...
[trace] 堆栈跟踪被抑制:运行 'last common/*:update' 以获得完整输出。
[trace] 堆栈跟踪被抑制:运行 'last common/*:ssExtractDependencies' 以获得完整输出。
[trace] 堆栈跟踪被抑制:run 'last 完整输出的 app1/*:ssExtractDependencies'。
[error] (common/*:update) sbt.ResolveException: unresolved dependency: com.typesafe.akka#akka actor_2.10;2.4.2: not found
[error] (common/*:ssExtractDependencies) sbt.ResolveException: unresolved dependency: com.typesafe.akka#akka-actor_2.10;2.4.2: not found
[错误] (app1/*:ssExtractDependencies) sbt.ResolveException: 未解决的依赖关系:com.typesafe.akka#akka-actor_2.10;2.4.2: not found
如果我将项目设置为 2.11.7,为什么 sbt 会尝试查找 akka-actor_2.10
?
更新:
明确说明版本,
libraryDependencies += "com.typesafe.akka" % "akka-actor_2.11" % "2.4.2"
有效,但随后您收到 SBT 项目导入警告:
[警告] Scala 版本已由库依赖项之一更新:
[warn] com.myorg#common$sources_2.10;1.0 中依赖项 org.scala-lang#scala-library;2.11.7 [warn] 的二进制版本(2.11)与项目中的 Scala 二进制版本(2.10 )。
[警告] 具有相同组织/名称但版本不同的多个依赖项。为避免冲突,请选择一个版本: [警告] * org.scala-lang:scala-library:(2.11.7, 2.10.4)...
编辑:
build.sbt
import Dependencies._
name := "coolApps"
version := "1.0"
scalaVersion := "2.11.7"
lazy val common = (project in file("common")).
settings(Commons.settings: _*).
settings(
libraryDependencies ++= commonDependencies
// dependencyOverrides += "org.scala-lang" % "scala-library" % scalaVersion.value
)
lazy val app1 = (project in file("app1")).
settings(Commons.settings: _*).
settings(
libraryDependencies ++= app1Dependencies
).
dependsOn(common)
Dependencies.scala
object Dependencies
val akka = "com.typesafe.akka" %% "akka-actor" % "2.4.2"
val commonDependencies: Seq[ModuleID] = Seq(
akka
)
val app1Dependencies: Seq[ModuleID] = Seq()
Commons.scala
import sbt._
import Keys._
object Commons
val coolAppVersion = "1.0"
val settings: Seq[Def.Setting[_]] = Seq(
organization := "com.company",
version := coolAppVersion,
scalacOptions := Seq("-unchecked", "-deprecation", "-encoding", "utf8"),
resolvers ++= Seq(
"Typesafe Releases" at "http://repo.typesafe.com/typesafe/releases/"
)
)
【问题讨论】:
你的 build.sbt 是什么? 将进行编辑并添加 build.sbt 【参考方案1】:在你的 build.sbt 中,你需要设置密钥
scalaVersion := "2.11.7"
如果不设置,它将使用 SBT 本身使用的 scala,即 2.10.x 版本。
【讨论】:
在做 SBT Multiproject 时,是否可能需要在每个子项目中设置 scalaVersion? 是的。解决了它。如果有人搜索,我将问题更改为更相关的问题,这也是在子项目中设置 Scala 版本的提醒(在我的情况下,将 scalaVersion 添加到常用设置中) 是的.. 每个项目都是相互独立的,因此不继承任何设置。我相信你知道.. 但是对于其他观察者来说.. 如果你执行“显示 scalaVersion”,它会向你显示所有应该有助于调试的项目的 scalaVersion。以上是关于SBT 多项目中未解决的依赖关系的主要内容,如果未能解决你的问题,请参考以下文章
sbt 插件和使用插件本身的多项目构建中的项目之间的相互依赖关系
未解决的依赖关系:sbt-plugin;2.7.0 尝试编译播放模板项目时