【问题标题】:"object index is not a member of package views.html" when opening scala play project in scala ide在scala ide中打开scala play项目时“对象索引不是包views.html的成员”
【发布时间】:2015-04-12 01:47:33
【问题描述】:

我用 play 2.3.7 创建了一个游戏项目

在项目目录下,我运行activator,运行eclipse命令生成eclipse项目文件。

当我进入 Eclipse 时(我使用来自 typesafe Build id: 4.0.0-vfinal-20150119-1023-Typesafe 的 Scala IDE,我的 Application.scala 文件中有一个错误:

object index is not a member of package views.html

我的设置有问题吗?当我在激活控制台提示符处执行run 时,应用程序运行良好。

谢谢!

编辑:添加代码

package controllers

import play.api._
import play.api.mvc._

object Application extends Controller {

  def index = Action {
    Ok(views.html.index("Your new application is ready."))
  }

} 

错误出现在“Ok..”行。

视图中有一个名为 index.scala.html 的文件,当我从 activator 运行它时,应用程序会运行该文件。

【问题讨论】:

标签: eclipse scala playframework-2.0


【解决方案1】:

有时在 Play 2.4.x 中添加视图后,IntelliJ IDEA 有时会感到困惑并绝对拒绝构建。甚至重建项目失败:

这在 IDEA 15 中仍然不时发生。当它发生时,命令行提供了最快、最可靠的修复:

sbt 清洁; sbt 编译

就是这样! IDEA 现在将按预期编译项目。

更新:

sbt compile在命令行上成功完成的罕见情况下,但IntelliJ IDEA 15仍然给出相同的“对象x不是成员”错误,那么这就解决了IDEA的困惑:

文件菜单:

【讨论】:

  • 它对我有用,但直到我在 Intellij 15 中打开终端,然后使用 Homebrew 安装 sbt,即 brew install sbt。之后,sbt clean; sbt combile 足以消除该错误。谢谢!
  • 这个解决方案也解决了我的问题。碰巧,您是否在重建过程中更改了通过 IJ 使用的 Scala 版本?我这样做了,它似乎触发了它,要求我从终端使用sbt clean; sbt compile
  • @ThomasFarvour 我不记得了,但要记住是个好主意。我最近没有看到它发生(因为我一直在使用 IDEA 16.1 EAP)。
  • @BrentFoust 在我的情况下,我必须手动将target/scala-2.11/routes/main 添加回我在 sbt 中定义的根模块中的源列表中。我怀疑这是 sbt 自动导入阶段的 IntelliJ 错误,因为其他人似乎表明必须为 twirl 执行此操作。
  • 遇到了 OP 的确切问题,而这个解决方案,特别是 Invalidate Caches,对我有用。使用 play 2.6.0 运行 IntelliJ。我不得不手动更新我的构建和属性文件中的 Scala、SBT 和 Play 版本,使其成为最新的,然后使用这个解决方案。
【解决方案2】:

其他解决方案对我不起作用。有些会给我不同的错误,有些会清除“问题”选项卡,但在 views.html.index 下留下一个红色波浪线,并且自动完成不适用于 scala.html 模板。

最终成功的是打开项目的属性,转到Java Build Path > Source,并添加以下两个目录:

target/scala-2.11/src_managed/main
target/scala-2.11/twirl/main

如果您只使用target/scala-2.11/twirl/main,那么您将错过从conf 目录生成的类文件。

【讨论】:

  • 注意:当您执行sbt eclipse 时,上面的自定义项目属性会被覆盖。我仍在寻找一种解决方案,将这些目录放入 Eclipse 类路径,而不会在该操作中丢失,我怀疑它涉及编辑 build.sbt,但我不太确定如何。当我找到它时,我会编辑我的答案。
  • 更新:我现在只使用带有 Scala 和 SBT 插件的 IntelliJ
  • 与 IntelliJ 2016.1 有同样的问题。这个解决方案对我来说很好。
  • @einnocent .... 我找不到 target/scala-2.11/src_managed/main 目录。我只有 target/scala-2.11/twirl/main
  • 很多人会一次又一次地访问这个页面。
【解决方案3】:

Scala IDE 4.0.0 thinks there's errors in an out-of-the-box Play Framework 2.3.7 program可以找到解决办法(简单来说:在编译路径中加入target/scala-2.11/twirl/main文件夹),试试看。

【讨论】:

  • 将该文件夹添加到 Java 构建路径 > 源从“问题”选项卡中删除了原始错误,但又添加了三个:not found: value routes
  • 我从未发现过这样的错误。但是在this other thread 中,他们讨论了同样的问题。会不会是你的路由文件是空的?
【解决方案4】:

我遇到了同样的问题。我将target/scala-2.x/classestarget/scala-2.x/classes_managed 添加到我的Java 构建路径中,Eclipse 不再抱怨。

【讨论】:

    【解决方案5】:

    target/scala-2.11/twirl/main 添加到为我修复了views.html 包的源代码。

    【讨论】:

    • 这也为我修复了它。不知道为什么插件找不到它。
    【解决方案6】:

    我在使用默认 SBT 布局 (disablePlugins(PlayLayoutPlugin)) 运行 Play 2.4.0-RC1 时遇到了同样的问题,并通过添加到 build.sbt 来解决它:

    sourceDirectories in (Compile, TwirlKeys.compileTemplates) :=
        (unmanagedSourceDirectories in Compile).value
    

    【讨论】:

      【解决方案7】:

      @brent-foust 的回答对我有用,但只是最初。每次我从 IDEA 中重建项目时,我都会从 target\scala-2.11\twirl\main\views\html\main.template.scala 中收到“未找到:路由”错误,直到我再次执行 Brent 的解决方法。

      我最终发现解决方案是更改 .iml 文件中的一行

      <excludeFolder url="file://$MODULE_DIR$/target/scala-2.11/src_managed/main" />
      

      <sourceFolder url="file://$MODULE_DIR$/target/scala-2.11/src_managed/main" isTestSource="false" />
      

      我不知道这样做的长期影响是什么,但它已经解决了这个问题。提到的其他一些类似问题也可以通过对 .iml 中列出的其他一些文件夹应用相同的更改来解决。

      【讨论】:

        【解决方案8】:

        我尝试了所有解决方案,但没有任何积极的结果。
        所以我去了Preferences &gt; Build, Execution, Deployment &gt; Build Tools &gt; sbt 并检查了Use sbt shell 的导入和构建。
        这让 intelliJ 中的编译按钮与 sbt shell 一起编译。 无论如何,我认为这更好,因为构建服务器或类似的东西将以相同的方式编译,而不像 intelliJ。

        【讨论】:

          【解决方案9】:

          对我来说,在将项目导入 intellij 时,请确保我“选中”了“自动导入”复选框。

          【讨论】:

            【解决方案10】:

            1) 将以下行添加到您的 sbt.build 文件中:

            EclipseKeys.preTasks := Seq(compile in Compile)
            

            2) 将以下行添加到项目文件夹下的 plugins.sbt 文件中:

            addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.1.0")
            

            3) 在 sbt 中运行“eclipse”命令

            如播放框架文档中所述:

            Setting up your preferred IDE

            【讨论】:

              【解决方案11】:

              基本上,我们需要一种方法将编译后的类放在路径上以使其工作。

              我做了以下修复它。 由于项目编译到target 目录。 我去了Project Properties -> Java Build Path 并添加了几个看起来像这样的文件夹,

              target/scala-2.12/routes/main 目标/scala-2.12/twirl 目标/scala-2.12/twirl/main

              现在我不希望您假设您的情况下也会有这些确切的文件夹。这取决于您的项目设置。 但是您应该在 target/scala-2.x 文件夹中添加文件夹。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2015-10-04
                • 2019-09-24
                • 1970-01-01
                • 2017-11-09
                • 1970-01-01
                • 1970-01-01
                • 2016-02-09
                相关资源
                最近更新 更多