Компилятор Grails продолжает работать снова и снова, возможно, из-за синтаксической ошибки - PullRequest
3 голосов
/ 23 декабря 2010

Я сталкивался с этой проблемой несколько раз: иногда, когда я запускаю команду: grails run-app, компилятор просто запускается снова и снова, хотя я ничего не меняю после этого. Похоже:

Running Grails application..
Server running. Browse to http://localhost:8080/LiningTest
  [groovyc] Compiling 1 source file to E:\workspace\W1\LiningTest\target\classes

  [groovyc] Compiling 2 source files to E:\workspace\W1\LiningTest\target\classe
s
   [delete] Deleting directory C:\Documents and Settings\Long\.grails\1.3.6\proj
ects\LiningTest\tomcat
Running Grails application..
Server running. Browse to http://localhost:8080/LiningTest
  [groovyc] Compiling 1 source file to E:\workspace\W1\LiningTest\target\classes

  [groovyc] Compiling 2 source files to E:\workspace\W1\LiningTest\target\classe
s
   [delete] Deleting directory C:\Documents and Settings\Long\.grails\1.3.6\proj
ects\LiningTest\tomcat
Running Grails application..
Server running. Browse to http://localhost:8080/LiningTest
  [groovyc] Compiling 1 source file to E:\workspace\W1\LiningTest\target\classes
...

Компилятор преуспел, когда "Сервер работает", но затем он автоматически перекомпилировал некоторые файлы (я не знаю, какой файл), и снова запустился, а затем перекомпилировал снова ...

Я встречался с этой проблемой один раз, когда у меня была синтаксическая ошибка

constraint {
number(min:0.50) // the right way is "min: 0..50"
}

Вопрос в том, почему возникла эта проблема, и как я могу найти причину проблемы. (Я предполагаю, что где-то пропустил запятую / точку, но сейчас это трудно найти, потому что нет сообщения об ошибке!)

ОБНОВЛЕНИЕ : Теперь я вижу проблему в том, что я не следую правилам структуры папок при размещении не доменного класса в src / groovy.

Ответы [ 3 ]

7 голосов
/ 23 декабря 2010

Первое, что нужно сделать, это запустить:

grails compile -verboseCompile 

Это, по крайней мере, скажет вам, что это за проблемный файл.

Видимо, это может произойти, когда

  • Имя пакета не соответствует каталогу (в корневом каталоге вашего источника), в котором находится файл.
  • Имя класса отличается от имени файла.

Посмотрите на это: http://www.pubbs.net/201007/grails/58100-grails-user-groovyc-causing-grails-to-loop-.html

И Питер Ледбрук упомянул об этом в своем выступлении на Groovy & Grails Exchange на прошлой неделе (в 29:20): http://skillsmatter.com/podcast/java-jee/talk-by-peter-ledbrook

1 голос
/ 06 января 2012

Я могу подтвердить странное поведение.

У меня было два классных класса в src/groovy, принадлежащих некоторому пакету com.acme.foobar.

Хотя какое-то время все прошло нормально, и Grails даже скомпилироваликлассы и запустили приложение (которое можно было использовать без исключений) - в какой-то момент оно не прекратило компилировать, запускать, удалять заново.

После того, как я поместил классы в src/groovy/com/acme/foobar, поведение мгновенно прекратилось.

Замечание об использовании grails compile -verboseCompile было полезным.По крайней мере, вы можете проверить, все ли в порядке, следующим образом:

Вызовите grails compile дважды:

Если при компиляции во время второй компиляции будет одинаковый вывод классов, возникнет проблема.

Если Grails разбрызгивает что-то вроде этого:

Running script /Users/ug/Software/grails/scripts/Compile.groovy
Environment set to development

, возвращаясь к запросу сразу после этого - проблема должна исчезнуть.

0 голосов
/ 23 декабря 2010

Хорошо, с Grails странное поведение, когда старший программист сказал мне:

Я поместил один из моих классов, не относящихся к домену, в src / groovy / warm.groovy.А вот тёплый.гровый относится к пакету «Линнингтест».Кажется, что вместо этого я должен поместить класс "Warm" в "src / groovy / liningtest / warm.groovy".

Здесь есть неявное правило:

Класс, не относящийся к доменуположить в src / groovy, должен следовать структуре папок, которая похожа на структуру пакета.

Это действительно странное поведение, потому что он не сообщает об ошибках, просто повторять компиляцию снова и снова... И что самое странное, это работает у меня в первый раз!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...