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 尝试编译播放模板项目时

sbt共享项目之间的依赖关系

如何解决具有不同包装常春藤类型的sbt中的依赖关系?

未解决的依赖关系 sbt with play framework

SBT。解决 play sbt-plugin 的依赖关系