Play Framework类型...已经定义

时间:2011-11-28 19:53:05

标签: compiler-construction types model playframework

when i try to run my Application it gives me following error:

Compilation error
The file /app/models/setting.java could not be compiled. Error raised is : The type Setting is already defined
  • 我只有一个文件“Setting.java”,位于models目录
  • 该文件名为“Setting.java”,而不是“setting.java”,因为错误消息显示
  • 我不包含任何游戏模块

我在Windows上玩游戏。是否有可能播放有窗口不敏感的问题?所以它首先尝试编译models / Setting.java并在那个models / setting.java ??

之后

这种奇怪行为还有什么其他原因?

/编辑: 既然我在这里写了这个问题,我没有在我的播放应用程序中编辑任何东西而且我没有重新启动它。现在我只是刷新页面并再次出现相同的错误 - 但是使用另一个模型!!

The file /app/models/staticsite.java could not be compiled. Error raised is : The type Staticsite is already defined

/ EDIT2: 在浏览器中刷新几页后,出现了这个错误:

The file /app/models/setting.java could not be compiled. Error raised is : The public type Setting must be defined in its own file

文件名为“Setting.java”,类名为Setting

5 个答案:

答案 0 :(得分:3)

“类型已定义”当问题超出上述类时,可以引发异常。如果您的类名匹配(区分大小写)并且它在自己的文件中定义,则下一步是找出最近更改的引用此类的代码。对我来说,问题是我的文件“utils.Utils.java”已经通过“import utils.Utils;”导入到另一个文件中。当我在代码中引用“utils.Utils.someMethod()”时,它真的混淆了编译器。我将该行改为“Utils.someMethod()”,异常消失了。

我可能应该想出一个更好的命名方案。 :/

答案 1 :(得分:2)

重命名您尝试编译的类文件时会发生此错误。折射类名后,只需重新运行播放框架即可。这将解决问题。

答案 2 :(得分:1)

您是否有settings.java并将其替换为Settings.java?无论如何,请尝试play clean

如果不起作用,请仔细检查文件中是否有任何有问题的隐形字符。

答案 3 :(得分:1)

我认为你正在使用settings.someProperty而不是声明对象“settings”,而play认为它是“设置”类的静态方法,大写字母有错误。

答案 4 :(得分:0)

我在尝试解决git中的合并冲突时遇到了这个问题。我错过了一个更改,并且收到了这个编译错误。

问题是我有一个名为ClassName的{​​{1}}类型的变量。该变量已被删除,但此特定行仍在尝试访问它。 Play没有报告className变量不存在,而是做了一些黑魔法并最终报告了上面的名称冲突:“className”。与Type ClassName is already defined类和ClassName变量存在某种名称冲突。

修复只是更改该行,删除对旧className变量的错误访问。然后运行className并重新启动服务器。