Подтвердить что ты не робот

Отладка Gradle плагинов с IntelliJ

Проблема

Я хочу использовать интерактивный отладчик с IntelliJ. К сожалению, я не могу убедить IntelliJ загрузить и скомпилировать плагин. Однако я могу сделать gradle clean build, и плагин строит и запускает свои тесты, как ожидалось.

В частности, я пытаюсь отладить локальные изменения gradle-js-plugin , и IntelliJ говорит, что не может найти com.google.javascript.jscomp.CompilerOptions, а также spock.lang.Specification. (Я думаю, может быть, это что-то о том, как они загружаются, но это предположение.)


Вещи, которые я пробовал

ПРИМЕЧАНИЕ. Я не возвращал никаких процессов между шагами.

0. Мой первый угадай

Я заметил howto на docs.codehaus.org. IntelliJ не смог найти org.gradle.launcher.GradleMain, поэтому я адаптировал его для использования GradleLauncher со следующим:

import org.gradle.GradleLauncher

class GradleScriptRunner {
    public static void main(String[] args) {
        GradleLauncher.newInstance(
            "-p", 
            "/path/to/gradle-js-plugin/src/test/resources/build.gradle", 
            "clean assemble"
        )
    }
}

Per Документация GradleLauncher.

Результат: IntelliJ не будет компилировать проект.


1. Per Ответ Питера Нидервизера Исправить проект идеи и отладить через плагин

Действия

  • ~# cd /path/to/gradle-js-plugin && gradle cleanIdea idea
  • Открыл вновь созданный проект и попытался выполнить отладку с помощью ScriptRunner с шага 0.

Результат: Компиляция проекта (yay!), но я могу ударить только точки останова в GradleScriptRunner.groovy.


2. Per Ответ Питера Нидервизера запустите gradle CLI w/специальные опции

1 и 2. Спрятались для ясности:

~# export GRADLE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
~# gradle clean assemble
Listening for transport dt_socket at address: 5005
  1. Настройте IntelliJ для подключения к этому порту и начала отладки (см. изображение): How I configured the debugger

Для этого шага я попробовал следующие конфигурации файлов .gradle:

1. Используйте только build.gradle

- build.gradle -

apply plugin: 'groovy'
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'maven'
apply plugin: 'js'

buildscript {
    repositories {
        mavenLocal()
        mavenCentral()
    }

    dependencies {
        compile findProject "/path/to/gradle-js-plugin"
    }
}

repositories {
    mavenLocal()
    mavenCentral()
}

Результат:

FAILURE: Build failed with an exception.

* Where:
Build file '/path/to/gradle-js-plugin/src/test/resources/build.gradle' line: 13

* What went wrong:
A problem occurred evaluating root project 'resources'.
> No such property: findProject for class: org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 8 mins 50.498 secs

2. Используйте как build.gradle, так и settings.gradle

- settings.gradle -

include "/path/to/gradle-js-plugin"

- build.gradle -

apply plugin: 'groovy'
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'maven'
apply plugin: 'js'

buildscript {
    repositories {
        mavenLocal()
        mavenCentral()
    }
}

repositories {
    mavenLocal()
    mavenCentral()
}

Результат:

FAILURE: Build failed with an exception.

* Where:
Build file '/path/to/gradle-js-plugin/src/test/resources/build.gradle' line: 5

* What went wrong:
A problem occurred evaluating root project 'resources'.
> Plugin with id 'js' not found.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 13.553 secs


Моя настройка

Gradle

~# gradle -v
------------------------------------------------------------
Gradle 1.0
------------------------------------------------------------

Gradle build time: Tuesday, June 12, 2012 12:56:21 AM UTC
Groovy: 1.8.6
Ant: Apache Ant(TM) version 1.8.2 compiled on December 20 2010
Ivy: 2.2.0
JVM: 1.7.0_04 (Oracle Corporation 23.0-b21)
OS: Linux 3.2.0-2-amd64 amd64

Java

~# java -version
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)

IntelliJ

IntelliJ IDEA Ultimate 117.499 w/ Bundled Gradle plugin

В ожидании

Любые подсказки, которые приведут меня в режим отладки в плагине.

4b9b3361

Ответ 1

Во-первых, похоже, что есть проблема с проектом IDEA Gradle. Если вы запустите gradlew cleanIdea idea, а затем откройте сгенерированный проект из IDEA (вместо использования плагина JetGradle), все должно быть хорошо.

Во-вторых, если вы все еще не можете использовать подход GradleMain/GradleLauncher (прежний класс) для работы, другой подход заключается в отладке сборки Gradle в качестве внешнего приложения. Для этого вам нужно добавить -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 в переменную среды GRADLE_OPTS, запустите сборку из командной строки, дождитесь ее приостановки и затем запустите конфигурацию запуска "Remote" (с соответствующими настройками) из IDEA. В этот момент отладчик должен подключиться к процессу Gradle, и вы должны быть запущены.

Ответ 2

Мне удалось отладить gradle источники (включая плагины) с помощью -Dorg.gradle.debug=true (найдено на gradle форуме):

  • Остановите демоны, если таковые имеются:

    ./gradlew --stop

  • Run

    ./gradlew <task> --no-daemon -Dorg.gradle.debug=true

  • Подключить удаленно к процессу gradle (порт 5005) - если вы используете IntelliJ IDEA, см. изображение OP выше

Теперь он должен остановиться на контрольных точках.


Кстати, я создал отдельный проект IntelliJ IDEA для источников gradle. Поскольку я использую оболочку gradle, я захватил источники из

~/.gradle/wrapper/dists/gradle-1.11-all/7qd8qq8te5j4f5q9aaei3gh3lj/gradle-1.11/src

В IDEA я сделал File->Import Project, затем выбрал вышеуказанный путь, затем - "Создать проект из существующих источников". Hit Следующие пару раз (убедитесь, что я не включил баночки из каталога lib/plugins, так как IDEA будет жаловаться, что большинство файлов проекта уже существует).

Затем я создал удаленную конфигурацию отладки в проекте IDEA и использовал ее для отладки gradle.

Ответ 3

IntelliJ IDEA 12.1 обеспечивает возможность отладки gradle задач из коробки - щелкните правой кнопкой мыши целевую задачу в списке задач окна инструмента JetGradle и выберите "debug"