Java 无法解析符号路由

Java 无法解析符号路由,java,intellij-idea,playframework-2.0,Java,Intellij Idea,Playframework 2.0,IntelliJ IDEA 14中没有的“路线”有什么问题 您是否尝试过不使用*** return redirect(routes.Application.index(); 根据报告: 对于routes文件中使用的每个控制器,路由器将生成 routes包中的“反向控制器”,具有相同的操作 方法,但返回play.mvc.Call 而不是play.mvc.Result 反向控制器在编译应用程序时生成。因此,您需要编译应用程序,以便在IDE中访问这些类。为了确保Idea正确找到文件,您可以右键单击包

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


您是否尝试过不使用
***

return redirect(routes.Application.index();
根据报告:

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


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

我解决了执行另一个线程中指定的这两个步骤的问题

(我正在使用Idea 15.0.1)

然后执行命令:

sbt gen-idea
正如建议的那样,这对我来说很有效:

return redirect(controllers.routes.Application.index());

这个问题我已经解决过好几次了。对我来说,该项目将使用
sbt
进行编译,但Intellij在解析引用时遇到了困难。以下是我发现的一些原因:


原因1:名称空间混乱

我多次提到的一个原因是Intellij由于一些通配符导入而对名称空间感到困惑——它实际上与项目配置无关

例如,我们发现如果您
导入play.api.\u
,Intellij将无法解析
导入控制器.routes
(或
控制器中的任何其他内容)。如果你换一下,没关系

您可以通过移动导入,或者查看相同的导入是否在不同的文件中工作,来测试这是否是问题所在

要检查Intellij是否真的无法解析您的类,请尝试从
\u root\u
引用该类。在我上面的例子中,Intellij始终能够解析
\u root\u.controllers.routes
,因此我知道这与我的项目的配置方式无关

(我不会在代码中留下
\u root\u
,但我认为这有点难看和混乱!有人会删除它,然后问题会再次出现。相反,我会尝试删除通配符导入)


原因2:生成的源未标记为“源”

routes
这样的类和
view
中的其他模板类是自动生成的。可能项目配置不正确,Intellij没有意识到有自动生成的路由和旋转源文件

在我的系统中,这些自动生成的文件夹位于
target/scala-[VERSION]/
中,作为
src_管理的
(所有路由内容)和
twirl
(所有模板内容)

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

  • 文件->项目结构
  • 在左窗格中选择“模块”
  • 在中间窗格中选择相关模块
  • 选择右窗格中的“源”选项卡
  • target
    中找到上面提到的文件夹,并将
    src_managed/main
    twirl/main
    标记为“源”(注意标记的是
    main
    文件夹,而不是外部文件夹)

原因3:
目标
被排除

我发现,有时导入项目时,Intellij会自动将
目标
目录标记为已排除。这意味着其中的“来源”实际上被忽略了。因此,请确保自动生成的源不在某个排除的目录中

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

如果必须这样做,则可能不会排除
target
中的所有目录。为了完整性起见,我将递归地将所有目录(如
解析缓存
)标记为已排除,以便只保留twirl和routes源目录


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

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

...
<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>
...
。。。
...

实际上可以使用更多信息,如播放版本、路由配置、错误消息、日志,越多越好。Intellij Idea 14,播放2.3.6,没有更多错误消息。Intellij Idea无法解析符号“路由”。请尝试
重定向(controllers.routes.App…
尝试返回重定向(controllers.routes.Application.index());相同的结果你可以构建你的项目吗?如果我没记错的话,Play会将
路由
文件生成到
目标
文件夹中,从那里可以使用它。是的,我刚刚使用了返回重定向(routes.Application.index();我有Intellij 15,Play 2.4.6 framework。我也遇到了同样的错误,
无法解析符号路由。
。如何解决此问题?需要帮助。
...
<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>
...