2016-04-11 2 views
3

Я снова работаю с 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. Кто-нибудь знает, как лучше справиться с этим?

ответ

4

Debuggin очень прост в Грааль 3. Открыть Application.groovy класса и нажмите отлаживать

+0

Wow. Большое спасибо пользователю3718614. Это работает. Не знаю, как я пропустил это, но это здорово. Благодаря!! Теперь я убираю некоторые муравьиные задачи из своего проекта. – bigMC28

+0

Вы можете отлаживать НО, если вы вносите изменения в некоторые части кода, такие как контроллеры, он не будет скомпилирован и немедленно доступен –

+0

Я получаю java.lang.NoClassDefFoundError: groovy/lang/GroovyObject. – sanya

2

работал для меня было начало Gradle bootRun задач с отладкой.

Точки останова и изменения перезарядки хорошо работали с использованием гранул 3.2.3 + intellij 2016.2.5

+0

Также работает над публикацией сообщества –

Смежные вопросы