首页 文章

如何强制Scala使用不同的库版本?

提问于
浏览
2

添加后

libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.0" % "test"

build.sbt ,并刷新了项目,我得到了这个消息 .

SBT项目导入[warn]具有相同组织/名称但不同版本的多个依赖项 . 为避免冲突,请选择一个版本:[warn] * org.scala-lang.modules:scala-xml_2.11:(1.0.5,1.0.4)

Changing the above

libraryDependencies ++= Seq(
  "org.scalatest" %% "scalatest" % "3.0.0" % "test"
  exclude("org.scala-lang", "scala-reflect")
  exclude("org.scala-lang.modules", "scala-xml_2.11")
)

解决了这个问题 . 但是,我不想从scalatest中排除scala-xml_2.11版本1.0.5,而是希望force the scala compiler使用scala-xml_2.11版本1.0.5而不是版本1.0.4 . (我在https://mvnrepository.com研究了版本 . )因此我尝试用 scalaVersion := "2.11.8" 代替

libraryDependencies ++= Seq(
  "org.scala-lang" % "scala-reflect" % "2.11.8",
  "org.scala-lang.modules" % "scala-xml_2.11" % "1.0.5"
)

然而,这导致了

SBT项目导入[warn]二进制版本(2.11)用于依赖org.scala-lang #scala-reflect; 2.11.8 [warn]默认情况下#myproject $ sources_javadoc_2.10; 1.0与项目中的Scala二进制版本(2.10)不同 . [warn]二进制版本(2.11)用于依赖org.scala-lang #scala-library; 2.11.8 [warn]默认情况下#myproject $ sources_javadoc_2.10; 1.0与项目(2.10)中的Scala二进制版本不同 . [warn]具有相同组织/名称但不同版本的多个依赖项 . 为了避免冲突,选择一个版本:[warn] * org.scala-lang:scala-library:(2.11.8,2.10.4)[warn] * org.scala-lang:scala-reflect:(2.11.8, 2.10.4)[warn] [FAILED] com.artima.supersafe#supersafe_2.10.4; 1.1.0!supersafe_2.10.4.jar(src):( 0ms)[warn] ==== local:try [warn] / home / user / .ivy2 / local / com.artima.supersafe / supersafe_2.10.4 / 1.1.0 / srcs / supersafe_2.10.4-sources.jar [warn] ==== activator-local:试过[warn] /开发/ Activator / activator-dist-1.3.10 / repository / com.artima.supersafe / supersafe_2.1 ...(显示气球)

我应该做些什么?

编辑:我尝试了什么,但没有用:

scalaVersion := "2.11.8"

libraryDependencies ++= Seq(
  "org.scala-lang" % "scala-reflect" % scalaVersion.value,
  "org.scala-lang.modules" %% "scala-xml" % "1.0.5"
)

// ScalaTest
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.0" % "test"

[warn]具有相同组织/名称但不同版本的多个依赖项 . 为避免冲突,请选择一个版本:[warn] * org.scala-lang.modules:scala-xml_2.11:(1.0.5,1.0.4)


scalaVersion := "2.11.8"

libraryDependencies ++= Seq(
  "org.scala-lang" % "scala-reflect" % scalaVersion.value,
  "org.scala-lang.modules" %% "scala-xml_2.11" % "1.0.5"
)

// ScalaTest
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.0" % "test"

错误:导入SBT项目时出错:... [info]
解析org.scala-sbt#run; 0.13.8 ... [info]解析
org.scala-sbt #task-system; 0.13.8 ... [info]解析
org.scala-sbt#tasks; 0.13.8 ... [info]解析
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 ... [info]解析
org.scala-sbt#command; 0.13.8 ... [info]解析
org.scala-sbt#logic; 0.13.8 ... [info]解析
org.scala-sbt #precompiled-2_8_2; 0.13.8 ... [info]解析
org.scala-sbt #precompiled-2_9_2; 0.13.8 ... [info]解析
org.scala-sbt #precompiled-2_9_3; 0.13.8 ... [trace]堆栈跟踪
抑制:为完整输出运行'last :update' . [追踪]堆栈
trace suppress:完整运行'last:ssExtractDependencies'
输出 . [error](:update)sbt.ResolveException:unresolved
依赖:org.scala-lang.modules#scala-xml_2.11_2.11; 1.0.5:不是
发现[错误](
:ssExtractDependencies)sbt.ResolveException:
未解决的依赖:
org.scala-lang.modules#scala-xml_2.11_2.11; 1.0.5:找不到[错误]
总时间:4秒,完成时间01.10.2016 17:46:55


scalaVersion := "2.11.8"

libraryDependencies ++= Seq(
  "org.scala-lang" % "scala-reflect" % scalaVersion.value,
  "org.scala-lang.modules" %% "scala-xml" % "1.0.5"
)

// ScalaTest
libraryDependencies ++= Seq(
  "org.scalatest" %% "scalatest" % "3.0.0" % "test"
  exclude("org.scala-lang", "scala-reflect")
  exclude("org.scala-lang.modules", "scala-xml")
)

[warn]具有相同组织/名称但不同版本的多个依赖项 . 为避免冲突,请选择一个版本:[warn] * org.scala-lang.modules:scala-xml_2.11:(1.0.5,1.0.4)

我的build.sbt

name := "MyProject"
version := "0.1.0"
scalaVersion := "2.11.8"

libraryDependencies ++= Seq(
  "org.scala-lang" % "scala-reflect" % scalaVersion.value,
  "org.scala-lang.modules" %% "scala-xml" % "1.0.5"
)

// ScalaTest
//libraryDependencies += "org.scalactic" %% "scalactic" % "3.0.0"
//libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.0" % "test"
libraryDependencies ++= Seq(
  "org.scalatest" %% "scalatest" % "3.0.0" % "test"
  exclude("org.scala-lang", "scala-reflect")
  exclude("org.scala-lang.modules", "scala-xml_2.11")
)

2 回答

  • 1

    排除特定传递依赖的方法是:

    • 运行 sbt evicted 以确定哪些项目依赖项正在过时的库中,让我们假设有问题的库是: com.typesafe.slick .

    • 添加以下排除(括号很重要):

    ("com.typesafe" %% "slick" % "3.1.1").exclude("org.scala-lang.modules", "scala-xml_2.11")

    正常添加此项,因为您将列出依赖项 .

    • 这将阻止sbt包含任何版本的 scala-xml ,它作为Slick的传递依赖而进入 .
  • 0

    不要替代;你需要 scalaVersionlibraryDependencies . 虽然使用

    scalaVersion := "2.11.8"
    
    libraryDependencies ++= Seq(
      "org.scala-lang" % "scala-reflect" % scalaVersion.value,
      "org.scala-lang.modules" %% "scala-xml" % "1.0.5"
    )
    

    当你最终改变 scalaVersion 时避免错误 .

    通过删除 scalaVersion ,您将获得默认 scalaVersion := "2.10.4" (至少包含您的SBT版本/设置),但您的 libraryDependencies 仍然需要2.11 .

相关问题