Play Framework 类型...已定义

问题描述 投票:0回答:5

当我尝试运行我的应用程序时,出现以下错误:

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

我正在 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

java types model playframework
5个回答
4
投票

当问题不在所提到的类之外时,可能会引发“类型已定义”异常。如果您的类名匹配(区分大小写)并且它是在自己的文件中定义的,则下一步是找出最近更改的引用此类的代码。对我来说,问题是我的文件“utils.Utils.java”已通过“import utils.Utils;”导入到另一个文件中当我在代码中引用“utils.Utils.someMethod()”时,这确实让编译器感到困惑。我将该行更改为“Utils.someMethod()”,异常消失了。

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


2
投票

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


1
投票

您是否有

settings.java
并将其替换为
Settings.java
?不管怎样,尝试一下
play clean

如果这不起作用,请仔细检查文件中是否存在任何有问题的不可见字符。


1
投票

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


0
投票

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

问题是我有一个名为

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

修复方法是更改该行,删除对旧

className

变量的不正确访问。然后运行

className
并重新启动服务器。
    

© www.soinside.com 2019 - 2024. All rights reserved.