无法解决 org.scalatest#scalatest;3.0.1: 未找到依赖项问题

Unable to resolve org.scalatest#scalatest;3.0.1: not found dependency issue

这里是 scala 的新手,正在经历 scala tutorial

我正在尝试使用教程中提到的 scalatest,但出现此错误:

[error] (*:update) sbt.ResolveException: unresolved dependency: org.scalatest#scalatest;3.0.1: not found

> scalaVersion
[info] 2.10.6

我的 build.sbt 文件如下所示:

name := "tasky"
version := "0.1.0"
libraryDependencies += "org.scalactic" %% "scalactic" % "3.0.1"
libraryDependencies += "org.scalatest" % "scalatest" % "3.0.1" % "test"

另外如前所述 here,我已在相应位置创建了 global.sbtplugins.sbt 文件,其中包含所需的详细信息。但是,我仍然收到错误消息:

[info] Updating {file:/home/tushar/lsbt/tasky/}tasky...
[info] Resolving org.scalatest#scalatest;3.0.1 ...
[warn]  module not found: org.scalatest#scalatest;3.0.1
[warn] ==== local: tried
[warn]   /home/tushar/.ivy2/local/org.scalatest/scalatest/3.0.1/ivys/ivy.xml
[warn] ==== public: tried
[warn]   https://repo1.maven.org/maven2/org/scalatest/scalatest/3.0.1/scalatest-3.0.1.pom
[warn] ==== local-preloaded-ivy: tried
[warn]   /home/tushar/.sbt/preloaded/org.scalatest/scalatest/3.0.1/ivys/ivy.xml
[warn] ==== local-preloaded: tried
[warn]   file:////home/tushar/.sbt/preloaded/org/scalatest/scalatest/3.0.1/scalatest-3.0.1.pom
[warn] ==== Artima Maven Repository: tried
[warn]   http://repo.artima.com/releases/org/scalatest/scalatest/3.0.1/scalatest-3.0.1.pom 
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: org.scalatest#scalatest;3.0.1: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn] 
[warn]  Note: Unresolved dependencies path:
[warn]      org.scalatest:scalatest:3.0.1 (/home/tushar/lsbt/tasky/built.sbt#L4-5)
[warn]        +- default:tasky_2.10:0.1.0
[trace] Stack trace suppressed: run last *:update for the full output.
[error] (*:update) sbt.ResolveException: unresolved dependency: org.scalatest#scalatest;3.0.1: not found

有解决此问题的建议吗?

您应该使用 %% 而不是单个 %,如下所示。 %% 将工件从 scalatest 更改为 scalatest_2.10,因为项目中使用的 scala 版本是 2.10。

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

您可以使用 %% 或如下所示明确指定 artifact_id

libraryDependencies +=  "org.scalatest" % "scalatest_2.10" % "3.0.1" % "test"

前一种方法优于后者。

说明

Scala 的次要版本不向后兼容。所以用 2.10 版本编译的库不能在使用 scala 2.11 的项目中使用。因此,必须通过为每个版本分别编译库来发布库(例如 2.10、2.11 和 2.12)。

因此,所有 Scala 工件都在末尾加上 scala 版本后缀发布。因此 scalatest 有一个神器 scalatest_2.10,scalatest_2.11 和 scalatest_2.12.

为了更容易 select 根据您的 scala 版本在您的 SBT 构建中选择正确版本的工件,SBT 提供了一个方便的符号 %%,它将通过以下方式更改工件 ID为您附加 Scala 版本。因此,如果 "org.scalatest" %% "scalatest" % "3.0.1" 会在您的构建中动态转换为 org.scalatest#scalatest_2.10;3.0.1

如果您使用的是 maven repository 那么它应该是

libraryDependencies += "org.scalatest" % "scalatest_2.11" % "3.0.1"

你的 scalactic 应该是

libraryDependencies += "org.scalactic" % "scalactic_2.11" % "3.0.1"