【问题标题】:Scala IDE 4.0.0 thinks there's errors in an out-of-the-box Play Framework 2.3.7 programScala IDE 4.0.0 认为开箱即用的 Play Framework 2.3.7 程序存在错误
【发布时间】:2017-02-21 16:02:55
【问题描述】:

我通过 Typesafe Activator 创建了一个 Play Framework 程序(因此它完全遵循模板)。

我使用sbteclipse-plugin 3.0.0 版创建了一个Eclipse 项目并将其导入到Scala IDE 4.0.0 中。这些都是撰写本文时的最新版本。

Scala IDE 似乎确实支持 Play Framework。它具有自定义格式的语法突出显示,包括路由文件和模板。然而,它似乎无法从控制器中找到视图。特别是对views.html.index 的调用会触发错误:“对象索引不是包views.html 的成员”。

我尝试使用原生钩子或池化为detailed here 启用刷新,但没有任何影响。

我应该注意,虽然代码已经在命令行中编译(使用activator ~run),但它还没有在 Scala IDE 中编译,因为我不知道如何(它似乎不是记录在任何地方)。

我能做些什么来摆脱这些错误的错误?

编辑:运行activator clean ~run 后,我遇到另一个错误:在解决构建路径错误之前无法构建项目。没有关于这些构建路径错误的更多详细信息。

【问题讨论】:

  • 你搞清楚了吗?我有同样的问题。怀疑该插件不适用于 4.0 scala ide 但仅适用于 3.x

标签: scala scala-ide


【解决方案1】:

更新:只需升级到sbteclipse 版本5.1.0,一切都应该开箱即用。还要确保你关注the Play documentation on how to set up Eclipse/ScalaIDE


这是sbteclipse 中的a known bug,可能很快就会有will be fixed

现在,您可以在 build.sbt 中添加以下行:

EclipseKeys.createSrc := EclipseCreateSrc.All

终止 SBT 控制台并再次运行 sbt eclipse。这应该将以下行添加到项目文件夹中的 .classpath 文件作为解决方法:

<classpathentry kind="src" path="target/scala-2.11/twirl/main"/>

刷新您的 Eclipse 项目以获取更改。

【讨论】:

  • 这里介绍Build path contains duplicate entry: 'target/scala-2.11/src_managed/main' for project '...'。因此,尽管可以在 Eclipse 中手动从项目的 java 构建路径中删除重复数据,但这并不是真正的解决方案。此外,我认为在进行此类更改时,需要一个项目clean 而不仅仅是刷新。这个解决方案对我来说表现得很奇怪。
  • 按照说明刷新和重建后,问题仍然存在。当我打开 project -> java path 时,几个路径,例如 twirl/test 和 .../managed/... 仍然在他们的名字后面说 [empty]。我必须删除 eclipse 项目,然后在所有 java-path 条目出现并且未找到的视图对象消失之前重新导入它。
  • @matt,如果您仍然需要它,我找到了解决该错误的方法并将其作为解决方案发布在下面。
  • 谢谢!我习惯在每次sbt eclipse 之后手动解决它,但如果在 Play 和 ScalaIDE 的下一个版本中没有解决它会尝试
  • @pitchblack408 Play 2.4.x 不再需要此解决方法。只需按照playframework.com/documentation/2.4.x/IDE#Eclipse 的指南设置 Eclipse,一切都应该开箱即用。我的解决方法仅适用于 Play 2.3.x。
【解决方案2】:

我遇到了同样的问题,Scala IDE 4.0.0 也是如此。我遵循mkurz 的指示,他们的工作就像一个魅力。但我没有手动更改项目文件夹中的.classpath 文件,而是使用了 Eclipse 界面:

  • 在主窗口的顶部菜单中,点击Project,然后点击Properties
  • Properties 窗口中,点击Java Build Path 选项(选项列表在左侧)
  • Source 选项卡中,单击Add Folder... 按钮。
  • Source Folder Selection窗口中,选择target/scala-2.11/twirl/main文件夹,使其包含在编译路径中。点击Ok按钮。
  • Properties 窗口中单击Ok

现在项目应该编译得很好:)。这样我就可以完成the play setup example in Scala IDE website

【讨论】:

  • Eclipse 没有看到目标下的“scala-2.11”文件夹......这真是个笑话
  • 请查看我的更新答案:将sbteclipse 升级到版本5.1.0(昨天发布),现在一切都应该开箱即用了。
【解决方案3】:

我首先尝试了@mkurz 解决方案,但也遇到了与@matt 相同的错误。我很沮丧,因为我无法生成 Eclipse 项目,而无需转到 Eclipse 项目属性来手动修复构建错误。经过一番调查,我发现了完全消除所有错误的解决方案。将此添加到您的 build.sbt:

unmanagedSourceDirectories in Compile <+= twirlCompileTemplates.target

或者,如果这对您不起作用,您也可以使用:

unmanagedSourceDirectories in Compile <+= target.zipWith(scalaBinaryVersion) { (b,v) => b / s"scala-$v/twirl/main" }

再见,构建错误!

【讨论】:

  • 对我来说也一样。上面列出的第二个解决方案对我有用,第一个没有。谢谢!
【解决方案4】:

我收到了同样的错误信息。 你在eclipse中使用java8作为jre吗? 从java8切换回java7后,一切又正常了。

【讨论】:

  • 它使用 Java 8 作为 JRE,但将其切换到 Java 7(并重新启动)没有任何影响。
【解决方案5】:

如果按照 Mkurz 的说明(添加 EclipseKeys.CreateSrc...)后,您的问题仍未解决,请单击 Project -> Properties -> Java Build Path。查看源文件夹选项卡。

您可能会发现一个名为 .../src_managed/main 的重复文件夹(感谢 Matt)。如果是这样,请关闭项目。从 .classpath 文件中删除两个 ../src_managed/main 条目之一(位于 activator/SBT 项目目录的基础中)。重新打开并清理项目,您应该一切顺利。

【讨论】:

    【解决方案6】:

    对我来说,原来在 Scala IDE 中安装的 JRE 是 openjdk,将其更改为 Oracle Java 8 并且可以正常工作。

    【讨论】:

      猜你喜欢
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多