无法解析符号路由

时间:2014-11-21 14:26:00

标签: java intellij-idea playframework-2.0

IntelliJ IDEA 14中没有的“路线”有什么问题?

Here

5 个答案:

答案 0 :(得分:8)

根据documentation

  

对于路径文件中使用的每个控制器,路由器将生成   路由包中的“反向控制器”,具有相同的操作   方法,具有相同的签名,但返回play.mvc.Call   而不是play.mvc.Result。

编译应用程序时会生成反向控制器。因此,您需要编译应用程序,以便在IDE中访问这些类。要确保Idea正确找到文件,您可以右键单击包含生成的类的target的子目录,并将其标记为源目录。

答案 1 :(得分:2)

我几次遇到这个问题。对我来说,该项目将使用sbt进行编译,但Intellij无法解析引用。以下是我发现的一些原因:

原因1:命名空间混淆

我遇到过这种情况的一个原因是,由于某些通配符导入,Intellij对名称空间感到困惑 - 它实际上与项目配置无关。

例如,我们发现如果您import play.api._,则Intellij无法解析import controllers.routes(或controllers中的任何其他内容)。如果你换掉它们,那就好了。

您可以通过移动导入来查看这是否是问题,或者查看相同的导入是否适用于不同的文件。

要检查Intellij是否真的无法解析您的课程,请尝试从_root_引用该课程。通过上面的示例,Intellij始终能够解析_root_.controllers.routes,因此我知道这不是与我的项目配置相关的问题。

(我不会在代码中留下_root_,但我认为它有点丑陋和令人困惑!有人会删除它然后问题会回来。相反,我&# 39; d尝试删除外卡导入)

原因2:生成的来源未标记为"来源"

routes之类的类和view内的其他模板类是自动生成的。项目没有正确配置,Intellij没有意识到有自动生成的路径和旋转源文件。

在我的系统上,这些自动生成的文件夹位于target/scala-[VERSION]/ src_managed(所有路线内容)和twirl(所有模板内容)。

要检查/修复此问题,请执行以下操作:

  • 文件 - >项目结构
  • 选择"模块"在左侧窗格中
  • 选择中心窗格中的相关模块
  • 选择"来源"右窗格中的选项卡
  • target内找到上述文件夹,并将src_managed/maintwirl/main标记为"来源" (注意您标记main文件夹,而不是外部文件夹)

原因3:排除target

我发现有时在导入项目时,Intellij会自动将target目标标记为已排除。这意味着"来源"在里面它被有效地忽略了。因此,请确保您自动生成的资源不在某个排除的目录中。

要解决此问题,请按照2中的说明进行操作,并确保target文件夹没有特殊标记。在我的Intellij版本中,这意味着图标是正常的棕色 - 不是红色或蓝色。

如果您必须这样做,那么target内的所有目录都可能被排除在外。为了完整起见,我递归地将所有目录(如resolution-cachestreams)标记为已排除,以便不排除旋转和路径源目录。

作为一个团队,我们很遗憾地遇到了这些问题。我们使用的一个技巧是只复制/粘贴彼此的.idea/modules/root.iml文件作为所有配置所在的文件。因此,如果一个开发人员有一个工作设置,只需将他们的Intellij conf复制到您自己的机器上。

这是我的conf的一个片段,它涉及如何配置源和排除(它基本上复制了上面2和3中的步骤)。我用它来玩2.3应用程序,它的工作原理。如果你有其他复杂的配置或依赖项自动生成代码,你可以尝试将它合并到你的root.iml中,或者如果你有一个简单的游戏项目,只需用你的content元素替换它:

...
<content url="file://$MODULE_DIR$/../..">
  <sourceFolder url="file://$MODULE_DIR$/../../app" isTestSource="false" />
  <sourceFolder url="file://$MODULE_DIR$/../../app-2.11" isTestSource="false" />
  <sourceFolder url="file://$MODULE_DIR$/../../target/scala-2.11/src_managed/main" isTestSource="false" />
  <sourceFolder url="file://$MODULE_DIR$/../../target/scala-2.11/twirl/main" isTestSource="false" />
  <sourceFolder url="file://$MODULE_DIR$/../../target/scala-2.11/src_managed/test" isTestSource="true" />
  <sourceFolder url="file://$MODULE_DIR$/../../target/scala-2.11/twirl/test" isTestSource="true" />
  <sourceFolder url="file://$MODULE_DIR$/../../test" isTestSource="true" />
  <sourceFolder url="file://$MODULE_DIR$/../../test-2.11" isTestSource="true" />
  <sourceFolder url="file://$MODULE_DIR$/../../conf" type="java-resource" />
  <sourceFolder url="file://$MODULE_DIR$/../../target/scala-2.11/resource_managed/main" type="java-resource" />
  <sourceFolder url="file://$MODULE_DIR$/../../target/scala-2.11/resource_managed/test" type="java-test-resource" />
  <sourceFolder url="file://$MODULE_DIR$/../../test/resources" type="java-test-resource" />
  <excludeFolder url="file://$MODULE_DIR$/../../target/resolution-cache" />
  <excludeFolder url="file://$MODULE_DIR$/../../target/streams" />
</content>
...

答案 2 :(得分:0)

你试过没有***吗?

return redirect(routes.Application.index();

答案 3 :(得分:0)

我解决了执行另一个线程https://stackoverflow.com/a/34085037/5078874

中指定的这两个步骤

(我正在使用Idea 15.0.1)

addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.6.0")

然后执行命令:

sbt gen-idea

答案 4 :(得分:0)

biesior所示,这对我有用:

.filter