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

标签 scala sbt

添加后

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

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

SBT project import

[warn] Multiple dependencies with the same organization/name but different versions. To avoid conflict, pick one version:

[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 project import

[warn] Binary version (2.11) for dependency org.scala-lang#scala-reflect;2.11.8

[warn] in default#myproject$sources_javadoc_2.10;1.0 differs from Scala binary version in project (2.10).

[warn] Binary version (2.11) for dependency org.scala-lang#scala-library;2.11.8

[warn] in default#myproject$sources_javadoc_2.10;1.0 differs from Scala binary version in project (2.10).

[warn] Multiple dependencies with the same organization/name but different versions. To avoid conflict, pick one version:

[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: tried

[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: tried [warn] /Development/Activator/activator-dist-1.3.10/repository/com.artima.supersafe/supersafe_2.1... (show balloon)

我该怎么办?

编辑:还有什么我尝试过但没有奏效的:

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] Multiple dependencies with the same organization/name but different versions. To avoid conflict, pick one version: [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"

Error:Error while importing SBT project:
...

[info]
Resolving org.scala-sbt#run;0.13.8 ... [info] Resolving
org.scala-sbt#task-system;0.13.8 ... [info] Resolving
org.scala-sbt#tasks;0.13.8 ... [info] Resolving
org.scala-sbt#tracking;0.13.8 ... [info] Resolving
org.scala-sbt#cache;0.13.8 ... [info] Resolving
org.scala-sbt#testing;0.13.8 ... [info] Resolving
org.scala-sbt#test-agent;0.13.8 ... [info] Resolving
org.scala-sbt#test-interface;1.0 ... [info] Resolving
org.scala-sbt#main-settings;0.13.8 ... [info] Resolving
org.scala-sbt#apply-macro;0.13.8 ... [info] Resolving
org.scala-sbt#command;0.13.8 ... [info] Resolving
org.scala-sbt#logic;0.13.8 ... [info] Resolving
org.scala-sbt#precompiled-2_8_2;0.13.8 ... [info] Resolving
org.scala-sbt#precompiled-2_9_2;0.13.8 ... [info] Resolving
org.scala-sbt#precompiled-2_9_3;0.13.8 ... [trace] Stack trace
suppressed: run 'last *:update' for the full output. [trace] Stack
trace suppressed: run 'last :ssExtractDependencies' for the full
output. [error] (:update) sbt.ResolveException: unresolved
dependency: org.scala-lang.modules#scala-xml_2.11_2.11;1.0.5: not
found [error] (*:ssExtractDependencies) sbt.ResolveException:
unresolved dependency:
org.scala-lang.modules#scala-xml_2.11_2.11;1.0.5: not found [error]
Total time: 4 s, completed 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] Multiple dependencies with the same organization/name but different versions. To avoid conflict, pick one version: [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")
)

最佳答案

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

  1. 运行 sbt evicted 找出哪些项目依赖项引入了过时的库,我们假设有问题的库是:com.typesafe.slick

  2. 添加以下排除项(括号很重要):

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

    正常添加它,因为您会列出依赖项。

  3. 这将防止 sbt 包含任何版本的 scala-xml 作为 Slick 的传递依赖项。

关于scala - 如何强制 Scala 使用不同的库版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39792400/

相关文章:

sbt - 如何将 sbt 插件发布到 nexus 存储库?

java - 为什么当我进行单元测试时,我得到的覆盖点是 `final lazy val` 而不是 `final val`?

java - 在 SBT/Play 中的构建定义内运行 Java 方法

scala - Slick 3.0 DAO 编译失败

Scala 嵌套案例类自绑定(bind)继承

scala - 构建 Spark 1.3.0 时出错 - 未解析的依赖项路径

python - pyspark 脚本需要 sbt scala 包生成器吗?

sbt - dependsOn 指示 sbt 在多项目构建中打包依赖项目?

java - 使用来自 java 的自类型依赖项初始化 scala 类

java - 如何检测消息过多? [ Akka Actor ]