【问题标题】:Unable to resolve org.scalatest#scalatest;3.0.1: not found dependency issue无法解决 org.scalatest#scalatest;3.0.1:未找到依赖问题
【发布时间】:2017-11-09 14:29:33
【问题描述】:

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

有解决这个问题的方法吗?

【问题讨论】:

    标签: scala sbt scalatest


    【解决方案1】:

    您应该使用%% 而不是单个%,如下所示。 %% 将工件从 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。

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

    【讨论】:

    • 这会导致以下错误:/home/tushar/lsbt/tasky/src/main/scala/TaskManagerSpec.scala:1: object scalatest is not a member of package org [error] import org.scalatest._
    • 现在可以得到scalatest了。
    【解决方案2】:

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

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

    你的scalactic应该是

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

    【讨论】:

    • 我正在使用 sbt。
    • 是的,我知道。我在谈论存储库。 sbt 是一个类似于 Maven 或 Ant 的构建工具。我提到的依赖项是针对 sbt 的。
    猜你喜欢
    • 2017-04-10
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 2015-12-13
    • 2017-10-07
    相关资源
    最近更新 更多