当我尝试运行我的应用程序时,出现以下错误:
Compilation error
The file /app/models/setting.java could not be compiled. Error raised is : The type Setting is already defined
我正在 Windows 上运行 play。难道是因为windows不区分大小写,所以play有问题吗?所以它会首先尝试编译 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
/编辑2: 在浏览器中刷新几次页面后出现此错误:
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
当问题不在所提到的类之外时,可能会引发“类型已定义”异常。如果您的类名匹配(区分大小写)并且它是在自己的文件中定义的,则下一步是找出最近更改的引用此类的代码。对我来说,问题是我的文件“utils.Utils.java”已通过“import utils.Utils;”导入到另一个文件中当我在代码中引用“utils.Utils.someMethod()”时,这确实让编译器感到困惑。我将该行更改为“Utils.someMethod()”,异常消失了。
我可能应该想出一个更好的命名方案。 :/
当您重命名尝试编译的类文件时,会发生此错误。只需在折射类名称后重新运行播放框架即可。这将解决问题。
您是否有
settings.java
并将其替换为 Settings.java
?不管怎样,尝试一下play clean
。
如果这不起作用,请仔细检查文件中是否存在任何有问题的不可见字符。
我认为您正在使用 settings.someProperty 而不声明对象“settings”,并且 play 认为它是“Settings”类的静态方法,但大写字母有错误。
我在尝试解决 git 中的合并冲突时遇到了这个问题。我错过了一个更改,并收到此编译器错误。
问题是我有一个名为
ClassName
类型的变量。该变量已被删除,但该特定行仍在尝试访问它。 Play 没有报告 className
变量不存在,而是做了一些黑魔法,最终报告了上面的名称冲突:“className
”。 Type ClassName is already defined
类和 ClassName
变量存在某种名称冲突。修复方法是更改该行,删除对旧
className
变量的不正确访问。然后运行
className
并重新启动服务器。