web-dev-qa-db-fra.com

Déboguer les plugins Gradle avec IntelliJ

Problème

Je veux utiliser le débogueur interactif avec IntelliJ.  Malheureusement, je ne peux pas convaincre IntelliJ de charger et de compiler le plugin. cependant, Je peux faire gradle clean build et le plugin construit et exécute ses tests comme prévu.

Plus précisément, j'essaie de déboguer les modifications locales en gradle-js-plugin et IntelliJ dit qu'il ne peut pas trouver com.google.javascript.jscomp.CompilerOptions aussi bien que spock.lang.Specification. (Je pense que c'est peut-être quelque chose à propos de la façon dont ils sont chargés, mais c'est une supposition.)


Les choses que j'ai essayées

REMARQUE: Je n'ai annulé aucun processus entre les étapes.

0. Ma première supposition

J'ai remarqué n guide sur docs.codehaus.org . IntelliJ n'a pas pu trouver org.gradle.launcher.GradleMain, je l'ai donc adapté pour utiliser GradleLauncher avec ce qui suit:

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 documentation de GradleLauncher .

Résultat: IntelliJ ne compilera pas le projet.


1. Par réponse de Peter Niederwieser Correction du projet d'idée et débogage via le plugin

Pas

  1. ~# cd /path/to/gradle-js-plugin && gradle cleanIdea idea
  2. Ouverture du projet nouvellement créé et tentative de débogage à l'aide de ScriptRunner à partir de l'étape 0.

Résultat: Le projet se compile ( yay !), mais je ne peux atteindre que des points d'arrêt dans GradleScriptRunner.groovy.


2. Par réponse de Peter Niederwieser exécuter gradle CLI avec options spéciales

1 & 2. Fusionnés pour plus de clarté:

~# 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. Configurez IntelliJ pour se connecter à ce port et commencer le débogage (voir image): How I configured the debugger

Pour cette étape, j'ai essayé les configurations de fichiers .gradle suivantes:

1. Utilisez uniquement 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()
}

Résultat:

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. Utilisez à la fois build.gradle et 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()
}

Résultat:

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

Ma configuration

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

Espérer que

Tous les conseils qui me mettront en mode débogage dans le plugin.

38
fncomp

Tout d'abord, il semble qu'il y ait un problème avec votre projet IDEA Gradle. Si vous exécutez gradlew cleanIdea idea puis ouvrez le projet généré à partir de IDEA (plutôt que d'utiliser le plugin JetGradle), tout devrait bien se passer.

Deuxièmement, si vous ne parvenez toujours pas à faire fonctionner l'approche GradleMain/GradleLauncher (l'ancienne classe existe), une autre approche consiste à déboguer la génération Gradle en tant qu'application externe. Pour cela, vous devez ajouter -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 à la GRADLE_OPTS variable d'environnement, exécutez la génération à partir de la ligne de commande, attendez qu'elle s'arrête, puis démarrez une configuration d'exécution "à distance" (avec les paramètres correspondants) à partir d'IDEA. À ce stade, le débogueur doit se connecter au processus Gradle et vous devez être opérationnel.

26
Peter Niederwieser

J'ai pu déboguer les sources gradle (y compris les plugins) en utilisant -Dorg.gradle.debug=true (trouvé sur le forum Gradle ):

  1. Arrêtez les démons le cas échéant:

    ./gradlew --stop

  2. Courir

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

  3. Connectez-vous à distance au processus gradle (port 5005) - si vous utilisez IntelliJ IDEA, voir l'image OP ci-dessus

Il devrait s'arrêter sur les points d'arrêt maintenant.


BTW, j'ai créé un projet IntelliJ IDEA pour les sources Gradle. Depuis que j'utilise le wrapper Gradle, j'ai récupéré les sources de

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

Dans IDEA j'ai fait File->Import Project, puis sélectionné le chemin ci-dessus, puis - "Créer un projet à partir de sources existantes". Appuyez plusieurs fois sur Next (assurez-vous que je n'ai inclus aucun bocal de lib/plugins répertoire, car IDEA se plaindrait que la plupart des fichiers de projet existent déjà).

J'ai ensuite créé une configuration de débogage à distance dans ce projet IDEA et je l'ai utilisée pour déboguer gradle.

28
Denis Kniazhev

IntelliJ IDEA 12.1 offre la possibilité de déboguer les tâches gradle hors de la boîte - cliquez avec le bouton droit sur la tâche cible dans la liste des tâches de la fenêtre de l'outil JetGradle et choisissez "déboguer"

16
denis.zhdanov