scalatest 的“未知工件。未解决或索引”错误

Posted

技术标签:

【中文标题】scalatest 的“未知工件。未解决或索引”错误【英文标题】:"Unknown artifact. Not resolved or indexed" error for scalatest 【发布时间】:2017-05-13 09:09:56 【问题描述】:

我正在尝试修改 build.sbt 文件以在 IntelliJ IDEA 中添加 scalatest 依赖项。控制台中没有错误日志,但是当我将鼠标悬停在下划线上时,我得到了 Unknown artifact. Not resolved or indexed.。我该如何解决这个问题?非常感谢!

这是我用来添加依赖的那一行:libraryDependencies += "org.scalatest" % "scalatest_2.11" % "3.0.1" % "test"

这是我的屏幕的样子:

【问题讨论】:

在命令行中运行sbt compile 是否有效?我试过了,它对我有用。不过,我没有使用 IntelliJ。 是的 compile 有效,但 scalatest 用于测试对吗?我在图书馆没看到。我对 scala 很陌生.. @JustinKaeser 我试过了,但控制台只显示新行。没有消息什么的。我正在使用 Mac。有什么区别吗? 对不起,我的意思是在 IntelliJ 中按 Alt+Enter 在出现警告的行并选择“更新项目解析器的索引”快速修复,然后选择“本地缓存”索引并单击“更新” 快速修复对我不起作用。本地常春藤仓库几秒钟前更新,旧工件仍显示为“未知工件”。 Analyze > Inspect Code ... 也有同样的问题 【参考方案1】:

如果你刚刚添加了依赖,它可能还没有被下载。刷新/重新导入项目以执行此操作。

如果已经下载,在 IntelliJ 中按 Alt+Enter 在出现警告的行并选择“更新项目解析器的索引”快速修复,然后选择“本地缓存”索引并单击“更新”。

您可以通过检查“更新”列中的日期来验证更新是否有效:

【讨论】:

谢谢! @JustinKaeser 你知道当警告消失并且不再有下划线时如何调出这个窗口吗? 它位于任何 *-build 模块的 SBT 选项卡上的项目设置/模块下的文件/项目结构对话框中。请注意,不包含正确索引的远程存储库存在一个问题,它们永远不会正确更新。 对于添加的每个依赖项build.sbt,这仍然是 IntelliJ 中的一个错误。很烦人,希望他们能尽快解决。这里link 更新缓存后可能需要刷新项目。【参考方案2】:

这已经激怒了我几个小时了,但我想我终于部分理解了发生了什么。以上建议都不适合我。

来自 sbt 文档中的 Automatic Dependency Management:

sbt 1.3.0+ 使用 Coursier 来实现依赖管理。直到 sbt 1.3.0,sbt 已经使用 Apache Ivy 十年了。 Coursier 在保持兼容性方面做得很好,但某些功能可能特定于 Apache Ivy。在这些情况下,您可以使用以下设置切换回 Ivy:

ThisBuild / useCoursier := false

我对我的情况的解释是 IntelliJ 没有对 Coursier 的适当支持(这很奇怪),但是 sbt 正在使用 Coursier 下载依赖项,然后 IntelliJ 找不到它们,因为它正在我的常春藤缓存中查找。 掌心

我正在使用 OSX、IntelliJ IDEA Ultimate 2019.2.3、Scala 2.12.8、JDK8(因为我正在使用 Spark)和 sbt 1.3.3。

将上面的行添加到我的build.sbt 文件为我解决了这个问题。我的~/.ivy2/cache 目录现在是最新的。 Coursier 将其缓存存储在~/Library/Caches/Coursier/v1 (docs) 中,但我似乎无法找到让 IntelliJ 使用 Coursier 缓存来解决依赖关系的方法。欢迎比我更了解 sbt 的人提供有关该主题的更多信息!

【讨论】:

这是我在 2020 年版本 2020.2 的相关答案。看起来重建后,您可以注释掉该行(直到下一次抱怨)。 我在仅使用 ThisBuild / useCoursier = false 时收到了 java.lang.IllegalArgumentException。根据github.com/sbt/sbt/issues/5263#issuecomment-626462593 使用 Coursier for updateSbtClassifiers 确实允许 IntelliJ 进行索引,但也解决了新引入的错误【参考方案3】:

我遇到了同样的问题。 File -> Invalidate Caches/Restart... 为我解决了这个问题。 在我的情况下,仅更新/刷新项目不起作用。

【讨论】:

确实如此。这就是让 2020.02 正常工作所需要的。谢谢!【参考方案4】:

在我的情况下,我尝试了:

    Alt + Enter 然后刷新项目。 更新解析器的本地缓存。 文件 -> 使缓存无效/重新启动。

以上都不起作用。因此,为了将来参考,这是我对这个问题的解决方案:

    确保启用 Maven 集成插件,而不是更新解析器的本地缓存,而是更新从不更新的公共。

如果是新安装的 IntelliJ IDEA,此过程可能需要一些时间才能完成下载。

【讨论】:

以上是关于scalatest 的“未知工件。未解决或索引”错误的主要内容,如果未能解决你的问题,请参考以下文章

scalatest : 对象 scalatest 不是包 org 的成员

如何使用 scalatest 运行 sbt 测试?我有一个错误:对象 scalatest 不是包 org 的成员

Scalatest - 并行套件

ScalaTest:在失败的期货中断言异常(非阻塞)

对象 scalatest 不是包 org 的成员

[转] ScalaTest测试框架