Play Framework Тип ... уже определен - PullRequest
2 голосов
/ 28 ноября 2011
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», который находится в каталоге моделей
  • , файл называется «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» и класс IS с именем Setting

Ответы [ 5 ]

3 голосов
/ 13 февраля 2013

Исключения типа «уже определены» могут возникать, когда проблема находится за пределами упомянутого класса. Если имя вашего класса совпадает (с учетом регистра) и оно определено в своем собственном файле, ваш следующий шаг - выяснить, какой код недавно изменился и который ссылается на этот класс. Для меня проблема заключалась в том, что мой файл "utils.Utils.java" был импортирован в другой файл через "import utils.Utils;" что действительно смутило компилятор, когда я ссылался на «utils.Utils.someMethod ()» в коде. Я изменил строку на «Utils.someMethod ()», и исключение исчезло.

Мне, наверное, следовало бы придумать лучшую схему именования. : /

2 голосов
/ 06 декабря 2012

Эта ошибка возникает при переименовании файла класса, который вы пытаетесь скомпилировать.Просто перезапустите игровую рамку после рефракции имени класса.Это решит проблему.

1 голос
/ 24 декабря 2011

Я думаю, что вы работаете с settings.someProperty без объявления объекта "settings", а play думает, что это статический метод класса "Settings" с ошибкой в ​​заглавной букве.

1 голос
/ 29 ноября 2011

Был ли у вас settings.java и заменен на Settings.java? В любом случае, попробуйте play clean.

Если это не сработает, убедитесь, что в вашем файле нет проблемных невидимых символов.

0 голосов
/ 04 января 2015

У меня была эта проблема при попытке разрешить конфликты слияния в git.Я пропустил изменение и получил эту ошибку компилятора.

Проблема заключалась в том, что у меня была переменная типа ClassName с именем className.Переменная была удалена, но эта конкретная строка все еще пыталась получить к ней доступ.Вместо сообщения о том, что переменная className не существует, Play выполнил черную магию и в итоге сообщил о конфликте имен выше: «Type ClassName is already defined».Был некоторый конфликт имен с классом ClassName и переменной className.

Исправление было просто изменить эту строку, удалив неправильный доступ к старой переменной className.Затем запустите play clean и перезапустите сервер.

...