【问题标题】:Sbt not resolving Scalatest on Intellij IDEASbt 无法解析 Intellij IDEA 上的 Scalatest
【发布时间】:2022-01-04 08:33:20
【问题描述】:

我知道已经回答了有关此问题的问题,但它们对我不起作用,可能是因为它们现在太旧了。

所以我正在 Intellij IDEA Ultimate (SDK 16.0.1) 上创建一个 scala 项目。我使用 sbt 编译它。我在src/test/scala 中创建了一个MainTest 类,内容如下:

import org.scalatest.funsuite.AnyFunSuite

class MainTest extends AnyFunSuite {
  test("Example") {
    assert(1 == 1)
  }
}

在我的build.sbt 文件中,我有:

name := "my-scala-project"

version := "0.1"

scalaVersion := "3.0.0-M2"

libraryDependencies += "org.scalatest" %% "scalatest" % "1.4.RC2" % Test

我还从文件 > 项目结构... > 项目设置 > 库窗口安装了来自 Maven 的库 org.scalatest:scalatest_2.11:3.1.0

在编辑器上,我可以看到 Intellij 无法解析我的测试文件上的导入,因为它被标记为红色。当我运行 sbt clean test 时,我收到以下错误消息:

[error] -- [E006] Not Found Error: path\to\project\src\test\scala\MainTest.scala:4:2
[error] 4 |  test("Example") {
[error]   |  ^^^^
[error]   |  Not found: test
[error] one error found
[error] one error found
[error] (Test / compileIncremental) Compilation failed

为什么它不起作用?我以为我已经按预期做了一切。理想情况下,我想使用最新的 3.2.9 版本的 Scalatest。

谢谢

【问题讨论】:

    标签: scala intellij-idea sbt scalatest


    【解决方案1】:

    你需要做两件事来修复你的代码:

    1. 更新build.sbt 以使用正确的依赖项;和
    2. 使用必要的特征扩展您的测试类。

    对于 1:

    使用以下内容导入 Scalatest 库:

    libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.10" % Test
    

    当您在当前配置中使用 _2.11 时,您是在要求 SBT 为您找到 Scala 2.11 的 scalatest 版本,但您使用的是 Scala 3.1.0。 %% 是为您的 Scala 版本引入正确版本的 Scalatest 的助手。

    对于 2:

    将您的文件as per the documention 更改为:

    class MainTest extends AnyFunSuite {
      test("Example") {
        assert(1 == 1)
      }
    }
    

    【讨论】:

    • 感谢您的回答。我修复了 build.sbt 文件,但是在尝试从 Maven 安装 scalatest 时,它只能找到最高 1.5 的版本,我不明白它与什么相关。它肯定不是 scala 版本 (3.0.1) 也不是 scalate 版本 (3.2.10)。谢谢
    • 当你说“它只能找到最高 1.5 的版本”时,你是什么意思?将libraryDependency 添加到build.sbt 文件后,在shell 中运行sbt reload 以自动更新依赖项。您应该会在托管资源目录中看到该 jar。
    • 我的意思是我在重新加载后运行sbt clean test 时收到此错误:[warn] Note: Unresolved dependencies path: [error] stack trace is suppressed; run 'last update' for the full output [error] (update) sbt.librarymanagement.ResolveException: Error downloading org.scalatest:scalatest_3.0.0-M2:1.4.RC2 [error] Not found [error] Not found [error] not found: C:\Users\adrie\.ivy2\localorg.scalatest\scalatest_3.0.0-M2\1.4.RC2\ivys\ivy.xml [error] not found: https://repo1.maven.org/maven2/org/scalatest/scalatest_3.0.0-M2/1.4.RC2/scalatest_3.0.0-M2-1.4.RC2.pom
    • 不清楚为什么maven目录路径包含1.4.RC2。您能否按照目前的样子使用完整的build.sbt 更新您的原始问题?
    • 我们使用 SBT 和 Maven 等工具的原因是为了不手动安装依赖项。我建议此时使您的 Intellij 缓存无效并重新启动。 Johny T Koshy 并且都可以仅使用配置文件和 SBT 下载依赖项。
    【解决方案2】:

    首先,您必须将scalaVersion 更改为3.0.0,这是最新支持的。

    就依赖关系而言,正如 Jarrod 所提到的,您可以使用

    "org.scalatest" %% "scalatest" % "3.2.10" % Test 
    

    当使用groupID %% artifactID % revision 时,您告诉 sbt 获取适合您提供的 scala 版本的 artifactID,在本例中为 3.0.0-M2

    您也可以使用groupID % artifactID % revision。就像在您的问题中一样,如果 scalatest_2.11 是 artifactID,则意味着将下载 scala 版本的 scalatest 2.11.x

    【讨论】:

    • 谢谢,但这并不能解决我的问题。我安装了 Maven 库org.scalatest:scalatest:1.3。我不知道为什么 Maven 找不到它的较早版本(从 intellij 库实用程序下载 1.3 库时,我将 sbt 更新为使用 1.3)
    • 不清楚你做了什么。你能从你的build.sbt 文件中分辨出当前的scalaVersionlibraryDependencies 吗?
    • 正如你所建议的,我将 3.0.0-M2 用于 scala 版本(它稳定吗?),org.scalatest" %% "scalatest" % "1.4.RC2" % Test 用于 sbt 文件中的 scalatest 依赖项(Maven 中没有比 1.4.RC2 更新的版本? ‍♂️)
    • 1.4.RC2 没有与scala 3.0.0-M2 兼容的版本。对于scalatest,您必须使用版本3.3.0-SNAP3。此设置适用于我的本地环境,使用 sbt 1.5.5 和 java 11。
    • 您不必使用 Intellij 的 Project Settings -> Libraries 手动添加 scalatest。而是使用build.sbt:添加scalaVersionlibraryDependencies 并重新加载项目。可以使用命令行中的sbt reload 重新加载,或者在更新build.sbt 后,Intellij 编辑器的右上角会有一个刷新图标。可能是 Intellij 中没有添加较新版本的 scalatest(我不知道)。此外,它将帮助您完成有关如何使用 sbt 设置 scala 项目的教程。
    【解决方案3】:

    我结合了我在评论中获得的所有帮助:

    我必须把它写在build.sbt 文件中:

    name := "meteo-france-client"
    
    version := "0.1"
    
    scalaVersion := "3.0.0-M2"
    
    libraryDependencies += "org.scalatest" %% "scalatest" % "3.3.0-SNAP3" % Test
    

    然后sbt reloadsbt clean compile 就可以了。但是我现在得到了这个例外:

    [info] compiling 1 Scala source to C:\Users\adrie\OneDrive\Documents\dev\meteo-france-client\target\scala-3.0.0-M2\test-classes ...
    [error] ## Exception when compiling 1 sources to C:\Users\adrie\OneDrive\Documents\dev\meteo-france-client\target\scala-3.0.0-M2\test-classes
    [error] java.lang.NoClassDefFoundError: scala/collection/immutable/List
    [error] xsbt.CachedCompilerImpl.run(CachedCompilerImpl.java:65)
    [error] xsbt.CompilerInterface.run(CompilerInterface.java:41)
    [error] java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    [error] java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
    [error] java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    [error] java.base/java.lang.reflect.Method.invoke(Method.java:567)
    [error] sbt.internal.inc.AnalyzingCompiler.invoke(AnalyzingCompiler.scala:329)
    [error] sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:112)
    [error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$7(MixedAnalyzingCompiler.scala:192)
    [error] scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
    [error] sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:247)
    [error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4(MixedAnalyzingCompiler.scala:182)
    [error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4$adapted(MixedAnalyzingCompiler.scala:163)
    [error] sbt.internal.inc.JarUtils$.withPreviousJar(JarUtils.scala:239)
    [error] sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:163)
    [error] sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:210)
    [error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:528)
    [error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:528)
    [error] sbt.internal.inc.Incremental$.$anonfun$apply$5(Incremental.scala:175)
    [error] sbt.internal.inc.Incremental$.$anonfun$apply$5$adapted(Incremental.scala:173)
    [error] sbt.internal.inc.Incremental$$anon$2.run(Incremental.scala:459)
    [error] sbt.internal.inc.IncrementalCommon$CycleState.next(IncrementalCommon.scala:116)
    [error] sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:56)
    [error] sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:52)
    [error] sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:263)
    [error] sbt.internal.inc.Incremental$.$anonfun$incrementalCompile$8(Incremental.scala:414)
    [error] sbt.internal.inc.Incremental$.withClassfileManager(Incremental.scala:501)
    [error] sbt.internal.inc.Incremental$.incrementalCompile(Incremental.scala:401)
    [error] sbt.internal.inc.Incremental$.apply(Incremental.scala:167)
    [error] sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:528)
    [error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:482)
    [error] sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:332)
    [error] sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:420)
    [error] sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:137)
    [error] sbt.Defaults$.compileIncrementalTaskImpl(Defaults.scala:2357)
    [error] sbt.Defaults$.$anonfun$compileIncrementalTask$2(Defaults.scala:2314)
    [error] sbt.internal.io.Retry$.apply(Retry.scala:46)
    [error] sbt.internal.io.Retry$.apply(Retry.scala:28)
    [error] sbt.internal.io.Retry$.apply(Retry.scala:23)
    [error] sbt.internal.server.BspCompileTask$.compute(BspCompileTask.scala:31)
    [error] sbt.Defaults$.$anonfun$compileIncrementalTask$1(Defaults.scala:2310)
    [error] scala.Function1.$anonfun$compose$1(Function1.scala:49)
    [error] sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62)
    [error] sbt.std.Transform$$anon$4.work(Transform.scala:68)
    [error] sbt.Execute.$anonfun$submit$2(Execute.scala:282)
    [error] sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:23)
    [error] sbt.Execute.work(Execute.scala:291)
    [error] sbt.Execute.$anonfun$submit$1(Execute.scala:282)
    [error] sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
    [error] sbt.CompletionService$$anon$2.call(CompletionService.scala:64)
    [error] java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    [error] java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    [error] java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    [error] java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
    [error] java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
    [error] java.base/java.lang.Thread.run(Thread.java:831)
    [error]
    [error] stack trace is suppressed; run 'last Test / compileIncremental' for the full output
    [error] (Test / compileIncremental) java.lang.NoClassDefFoundError: scala/collection/immutable/List
    [error] Total time: 0 s, completed 26 nov. 2021, 13:33:34
    

    我会再发一篇关于它的帖子:Sbt unable to find List class definition on Scala 3.0.0-M2

    感谢所有在这里帮助过我的人

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-24
      • 2021-12-29
      • 2011-09-09
      相关资源
      最近更新 更多