Вопрос по intellij-idea, gradle, debugging – Отладка плагинов Gradle с помощью IntelliJ

37
Problem

I want to use the interactive debugger with IntelliJ. Unfortunately, I can't convince IntelliJ to load and compile the plugin. However, я могу сделатьgradle clean build и плагин собирает и запускает свои тесты, как и ожидалось.

В частности, я пытаюсь отладить локальные изменения вGradle-JS-плагин and IntelliJ says it can't find com.google.javascript.jscomp.CompilerOptions as well as spock.lang.Specification. (I'm thinking maybe it's something about the way they are loaded, but that's a guess.)


Things I've tried

NOTE: Я не возвращал какие-либо процессы между этапами.

0. My First Guess

Я заметилкак на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"
        )
    }
}

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

Outcome: IntelliJ не скомпилирует проект.

1. Per Peter Niederwieser's answer Fix idea project & debug via plugin Steps ~# cd /path/to/gradle-js-plugin && gradle cleanIdea idea Opened the newly created project and attempted to debug using the ScriptRunner from step 0.

Outcome: Проект компилируется (yay!), но я могу попасть только в точки остановаGradleScriptRunner.groovy.

2. Per Peter Niederwieser's answer run gradle CLI w/ special options

1 & amp; 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
Configure IntelliJ to connect to this port and start debugging (see image): How I configured the debugger

For this step I tried the following .gradle file configurations:

1. Use only 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()
}

Outcome:

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. Use both build.gradle and 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()
}

Outcome:

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

My Setup 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

Hoping for

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

Кстати, я могу пройтись по коду плагина, используя технику Питера. Пожалуйста, дайте мне знать, если у вас есть какие-либо проблемы с этим. Eric Wendelin

Ваш Ответ

3   ответа
14

коробки» - щелкните правой кнопкой мыши целевую задачу в списке задач окна инструмента JetGradle и выберите «отладка»;

Да, это круто. (Не было случая, когда я начал работать с Gradle.) fncomp
26

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

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

я думалcompile findProject "/path/to/gradle-js-plugin" создаст экземпляр плагина во время выполнения. Это неверно? Если нет, можете ли вы указать мне, как я должен включать плагин для использования локальной версии. fncomp
Кажется, я не могу получить отладчик внутри плагина. Я сейчас обновляю вопрос. fncomp
Похоже, вы забыли объявить & quot; js & quot; плагин в разделе сценария сборки. Если отладчик не останавливается на точках останова, возможно, существует несоответствие между версиями «js». плагин и Gradle, которые вы используете в сборке, и версии, которые вы настроили в IDE. Убедитесь, что они одинаковы.
Обратите внимание, точно уверен, что вы пытаетесь достичь, но вы не можете применить плагин в той же сборке, в которой он объявлен. Кроме того, в последнемbuild.gradle у вас нетdependencies раздел на всех.
+1 IntelliJ теперь распознает классы, но пока не достигает точек останова внутри плагина. Я собираюсь попробовать внешний подход. Чтобы было ясно, я ударил точки останова внутри main, но я не ударил точки останова внутри плагина при запуске main через инструмент отладки. Я отмечу как ответ, если достигну точки останова в плагине. Благодарю. fncomp
28

ю-Dorg.gradle.debug=true (найденныйна форуме Gradle):

Stop daemons if any:

./gradlew --stop

Run

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

Connect remotely to gradle process (port 5005) - if using IntelliJ IDEA, see OP's image above

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

Кстати, я создал отдельный проект IntelliJ IDEA для источников Gradle. Так как я использую Gradle-упаковщик, я взял источники из

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

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

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

Похожие вопросы