简体   繁体   English

Sbt 无法解析 Intellij IDEA 上的 Scalatest

[英]Sbt not resolving Scalatest on Intellij IDEA

I know there are already answered questions about this, but they didn't work for me, maybe because they are too old now.我知道已经回答了有关此问题的问题,但它们对我不起作用,也许是因为它们现在太老了。

So I'm creating a scala project on Intellij IDEA Ultimate (SDK 16.0.1).所以我在 Intellij IDEA Ultimate (SDK 16.0.1) 上创建了一个 scala 项目。 I compile it using sbt.我使用 sbt 编译它。 I created a MainTest class in src/test/scala with the following content:我在src/test/scala中创建了一个MainTest class ,内容如下:

import org.scalatest.funsuite.AnyFunSuite

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

On my build.sbt file I have:在我的build.sbt文件中,我有:

name := "my-scala-project"

version := "0.1"

scalaVersion := "3.0.0-M2"

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

I have also installed the library org.scalatest:scalatest_2.11:3.1.0 from Maven from the File > Project Structure... > Project Settings > Libraries window我还从文件 > 项目结构... > 项目设置 > 库 window 中安装了库org.scalatest:scalatest_2.11:3.1.0

On the editor I can see that Intellij is unable to resolve the import on my test file as it is marked in red.在编辑器上,我可以看到 Intellij 无法解析我的测试文件上的导入,因为它被标记为红色。 When I run sbt clean test , I get this error message:当我运行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

Why isn't it working?为什么它不起作用? I thought I have done everything as expected.我以为我已经按预期做了一切。 Ideally I would like to use the latest 3.2.9 version of Scalatest.理想情况下,我想使用最新的 3.2.9 版本的 Scalatest。

Thanks谢谢

You need to do two things to fix your code:你需要做两件事来修复你的代码:

  1. Update build.sbt to use the correct dependency;更新build.sbt以使用正确的依赖项; and
  2. Extend your test class with the necessary trait.使用必要的特征扩展您的测试 class。

For 1:对于 1:

Import the Scalatest library with the following:使用以下内容导入 Scalatest 库:

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

When you use _2.11 in the current configuration you're asking SBT to find you version of scalatest for Scala 2.11, but you're using Scala 3.1.0.当您在当前配置中使用_2.11时,您要求 SBT 查找 Scala 2.11 的 scalatest 版本,但您使用的是 Scala。 The %% is a helper to pull in the correct version of Scalatest for your Scala version. %%是为您的 Scala 版本引入正确版本的 Scalatest 的助手。

For 2:对于 2:

Change your file as per the documention to: 根据文档将您的文件更改为:

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

First of all, you have to change the scalaVersion to 3.0.0-M2 , which is the latest supported.首先,您必须将scalaVersion更改为3.0.0-M2 ,这是最新支持的。

As far as dependencies are concerned, as Jarrod has mentioned, you could either use就依赖关系而言,正如 Jarrod 所提到的,您可以使用

"org.scalatest" %% "scalatest" % "3.3.0-SNAP3" % Test 

When using groupID %% artifactID % revision you are telling sbt to fetch the artifactID suited for the scala version you have provided, in this case, 3.0.0-M2 .使用groupID %% artifactID % revision时,您告诉 sbt 获取适合您提供的 scala 版本的 artifactID,在本例中为3.0.0-M2

You can also use groupID % artifactID % revision .您还可以使用groupID % artifactID % revision Like in your question, if scalatest_2.11 is the artifactID, it means scalatest for scala version 2.11.x will be downloaded.就像在您的问题中一样,如果scalatest_2.11是 artifactID,则意味着将下载scalatest版本2.11.x的 scalatest。

I combine all the help I got in the comment:我结合了我在评论中获得的所有帮助:

I had to write this in the build.sbt file:我必须在build.sbt文件中写下这个:

name := "meteo-france-client"

version := "0.1"

scalaVersion := "3.0.0-M2"

libraryDependencies += "org.scalatest" %% "scalatest" % "3.3.0-SNAP3" % Test

Then sbt reload and sbt clean compile and it works.然后sbt reloadsbt clean compile并且它工作。 However I now get this exceptions:但是我现在得到了这个例外:

[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

I'll make another post about it: Sbt unable to find List class definition on Scala 3.0.0-M2我会再发一篇关于它的帖子: Sbt 无法在 Scala 3.0.0-M2 上找到列表 class 定义

Thanks for all who have helped me here感谢所有在这里帮助过我的人

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM