Отладка 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
.
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
- Настройте 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
В ожидании
Любые подсказки, которые приведут меня в режим отладки в плагине.
Ответы
Ответ 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"