"对象索引不是包view.html的成员"在scala ide中打开scala play项目时

时间:2015-02-11 15:50:52

标签: eclipse scala playframework-2.0

我用play 2.3.7

创建了一个游戏项目

在项目目录中,我运行了activator并运行eclipse命令来生成eclipse项目文件。

当我去eclipse时(我使用的是类型安全的构建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的文件,当我从激活器运行时,应用程序会运行文件。

11 个答案:

答案 0 :(得分:25)

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

enter image description here

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

  

干净; sbt compile

那就是它! IDEA现在将按预期编译项目。

更新

在极少数情况下sbt compile在命令行上成功完成,但IntelliJ IDEA 15仍然提供相同的"对象x不是成员"错误,这解决了IDEA的困惑:

文件菜单:

enter image description here

答案 1 :(得分:12)

其他解决方案对我不起作用。有些会给我不同的错误,有些会清除问题标签,但在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目录生成的类文件。

答案 2 :(得分:8)

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文件夹添加到编译路径中),试一试。

答案 3 :(得分:4)

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

答案 4 :(得分:2)

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

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

答案 5 :(得分:2)

Set: $cookieStore.put('ItsMe', 12345); Retrieve: $cookieStore.get('ItsMe'); Remove: $cookieStore.remove('ItsMe'); 包含target/scala-2.11/twirl/main个包的views.html添加到为我修复的来源。

答案 6 :(得分:1)

@ brent-foust的回答对我有用,但最初才有效。每次我从IDEA内部重建项目时,我都会在<excludeFolder url="file://$MODULE_DIR$/target/scala-2.11/src_managed/main" /> 内得到“not found:routes”错误,直到我再次执行Brent的解决方法。

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

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

{{1}}

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

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

目标/阶-2.12 /路线/主要 目标/阶-2.12 /捻 目标/阶-2.12 /捻/主

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

答案 10 :(得分:0)

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