IntelliJ Idea 无法解析 Scala 管理源中的符号 (sbt-buildinfo)

Posted

技术标签:

【中文标题】IntelliJ Idea 无法解析 Scala 管理源中的符号 (sbt-buildinfo)【英文标题】:IntelliJ Idea can't resolve symbol that inside Scala managed sources (sbt-buildinfo) 【发布时间】:2018-03-27 14:07:30 【问题描述】:

我认为这可能是新版本中出现的问题,并且无法作为旧版本解决,我有一个带有 sbt-buildinfo 插件的 Play Java 项目,这个问题真的很常见,因为 IntelliJ 一直说它可以' t 解析那个符号

这是文件:

可以在IntelliJ Idea sbt managed source file 和此处sbt-buildinfo generated object cannot be referenced 找到一些解决方案,但所提供的解决方案都对我没有帮助:

真正奇怪的是,如果我“取消将目录标记为生成的源”,然后将 BuildInfo.scala 文件手动移动到包文件夹到 buildpkg(我的自定义包)而不是 sbt-buildinfo 包,IntelliJ 看到那个文件,但是这个更改是没有用的,因为该文件将再次生成并且所有更改都将被丢弃:

这是我的 build.sbt

lazy val root = (project in file(".")).enablePlugins(PlayJava, BuildInfoPlugin)
  .settings(
    buildInfoKeys := Seq[BuildInfoKey](name, version, scalaVersion, sbtVersion, buildInfoBuildNumber,
      "hostname" -> java.net.InetAddress.getLocalHost.getHostName,
      "gitHash" -> sys.env.getOrElse("BITBUCKET_COMMIT", "No BITBUCKET_COMMIT set")
    ),
    buildInfoPackage := "buildpkg",
    buildInfoOptions += BuildInfoOption.ToJson,
    buildInfoOptions += BuildInfoOption.BuildTime
  )

scalaVersion := "2.12.3"

还有我的 plugins.sbt

// The Play plugin
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.5")

addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.7.0")

那么我缺少什么,解决方案是什么

【问题讨论】:

您可以尝试设置buildInfoUsePackageAsPath := true 看看是否有帮助? @JustinKaeser 这太棒了,这行得通!哇!请添加答案,以便我接受:) 【参考方案1】:

    在 IntelliJ 的 sbt 设置中,启用“使用 sbt shell 进行构建和导入”设置,因为只有在 sbt 运行构建时才会生成源代码。

    IntelliJ 目前只会在生成的源代码位于正确的包目录中时才能正确更新它们。对于 sbt-buildinfo,添加设置

    buildInfoUsePackageAsPath := true

    致您的build.sbt

【讨论】:

您可以在IntelliJ -> Preferences -> Build, Execution, Deployment -> Build Tools -> sbt 中找到选项use sbt shell for build and import【参考方案2】:

如果基于 SBT 的项目一开始没有“导入”,也会出现此问题。

要尝试解决此问题:

    关闭有问题的 IntelliJ 项目。 选择导入项目 在“导入项目”对话框中,选择“从外部模型导入项目” 选择“sbt”。请注意,不需要检查“使用 sbt shell 进行构建...”。如果您不单击此按钮,您仍然可以利用自动加载。确保检查库来源。

按 Finish 并让它构建它现在首次加载插件等所需的内容。

【讨论】:

其实已经正确导入并勾选了auto-import,否则项目中会充满unseen packages和classes的错误,请再看问题,可以看到IntelliJ简单识别项目:) 谢谢。无论如何,贾斯汀的回答是解决方案,确切地说,这条线在这里解决了我的问题buildInfoUsePackageAsPath := true 一切都已正确设置。

以上是关于IntelliJ Idea 无法解析 Scala 管理源中的符号 (sbt-buildinfo)的主要内容,如果未能解决你的问题,请参考以下文章

Intellij IDEA 设置:无法解析符号 println

Scala之完美解决IntelliJ IDEA安装scala插件失败,install安装后不成功,项目中无法新建一个Scala类

IntelliJ 在创建 Scala 项目后在 build.sbt 中给出“无法解析符号”的错误

Intellij IDEA 无法使用 Play 框架解析符号

TwirlKeys.templateImports with Play 未在 IntelliJ IDEA 模板文件中解析

如何解决 IntelliJ IDEA 中的“无法解析符号”? [复制]