Я снова работаю с Grails через несколько лет от него. Я использую IntelliJ 2016.01 и Grails 3.1.4. Это должно быть легко, как пирог, не так ли? Все работает нормально, за исключением того, что я не могу запустить отладчик из IntelliJ, как я привык делать. В прежней жизни я использую IJ10 с Grails 1.0.5.Grails 3 Отладка в IntelliJ
Через различные поиски я пришел, чтобы выяснить, что изменение произошло в Grails 2.3, когда они начали работать в разветвленном режиме по разным причинам. Не понимая всех технических деталей, я понимаю, что это было сделано по соображениям производительности. Во всяком случае, я смог найти обходное решение, но это похоже на долгий путь. Кто-нибудь знает лучший способ? Что мне не хватает?
Я создал муравей задачу для вызова Grails выполнения приложения:
<target name="start-debug-grails">
<exec executable="cmd">
<arg value="/c"/>
<arg value="start"/>
<arg value="grails"/>
<arg value="run-app"/>
<arg value="--debug-jvm"/>
</exec>
</target>
Если запустить эту задачу своих сил вы видите Grails работает в режиме отладки в новом окне CMD: | Запуск приложения ... Прослушивание транспорта dt_socket по адресу: 5005
Затем я создал конфигурацию «Удаленный» запуск/отладка в IntelliJ для присоединения к порту 5005. У меня есть кнопка отладки, доступная для этой конфигурации Run/Debug поэтому я нажимаю debug. Он отлично подходит.
Сначала я вижу это в IntelliJ:
Connected to the target VM, address: 'localhost:5005', transport: 'socket'
Затем несколько мгновений спустя CMD окно обновляется, чтобы показать, что приложение в режиме отладки:
| Running application...
Listening for transport dt_socket at address: 5005
Grails application running at http://localhost:8080 in environment: development
На данный момент я могу перемещайте приложение на порт 8080 без проблем. Я могу вносить изменения в некоторые части кода, такие как контроллеры, и он будет скомпилирован и немедленно доступен. Да.
Я взял его на шаг дальше и добавил остановить муравей задачу (что было немного сложнее, чем это должно было быть), так что я мог бы выполнить обе задачи (остановка первого, если процесс запущен), то начать:
<target name="stop-debug-grails" depends="-stop-debug-init, -stop-debug-kill"/>
<target name="-stop-debug-init">
<!--check if process is running-->
<exec executable="jps">
<arg value="-l"/>
<redirector outputproperty="process.pid">
<outputfilterchain>
<linecontains>
<contains value="grails"/>
</linecontains>
<replacestring from=" org.grails.cli.GrailsCli"/>
</outputfilterchain>
</redirector>
</exec>
<echo>
${process.pid}
</echo>
<condition property="do.kill">
<not>
<!--checks to make sure pid is non blank before calling kill-process-->
<equals arg1="${process.pid}" arg2="" />
</not>
</condition>
</target>
<target name="-stop-debug-kill" if="do.kill">
<echo>
killing process ${process.pid}
</echo>
<exec executable="taskkill" osfamily="winnt">
<arg value="/F"/>
<arg value="/PID"/>
<arg value="${process.pid}"/>
</exec>
<exec executable="kill" osfamily="unix">
<arg value="-9"/>
<arg value="${process.pid}"/>
</exec>
</target>
я должен был изменить свой старт-отладочные-Grails задачу ждать Grails, чтобы начать прослушивание на порту 5005.
<!--delay to let the server start-->
<sleep seconds="20"/>
Теперь я могу отлаживать в IntelliJ, как я привык к сквозному нажав отладки для удаленного процесса в IntelliJ. Кто-нибудь знает, как лучше справиться с этим?
Wow. Большое спасибо пользователю3718614. Это работает. Не знаю, как я пропустил это, но это здорово. Благодаря!! Теперь я убираю некоторые муравьиные задачи из своего проекта. – bigMC28
Вы можете отлаживать НО, если вы вносите изменения в некоторые части кода, такие как контроллеры, он не будет скомпилирован и немедленно доступен –
Я получаю java.lang.NoClassDefFoundError: groovy/lang/GroovyObject. – sanya