使用IntelliJ调试Gradle插件

fnc*_*omp 38 debugging intellij-idea gradle

问题

我想使用IntelliJ的交互式调试器. 不幸的是,我无法说服IntelliJ加载和编译插件.但是,我可以这样做gradle clean build,插件构建并按预期运行其测试.

具体来说,我试图调试本地更改摇篮-JS-插件 和IntelliJ说,它无法找到com.google.javascript.jscomp.CompilerOptionsspock.lang.Specification.(我想也许这是他们加载的方式,但这是猜测.)


我尝试过的事情

注意:我没有在步骤之间恢复任何进程.

我的第一个猜测

我在docs.codehaus.org上发现了一个howto.IntelliJ无法找到,所以我已将其改编为使用以下内容:org.gradle.launcher.GradleMainGradleLauncher

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"
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

Per GradleLauncher的文档.

结果: IntelliJ不会编译项目.


1. Per Peter Niederwieser的回答通过插件修复想法项目和调试

脚步

  1. ~# cd /path/to/gradle-js-plugin && gradle cleanIdea idea
  2. 打开新创建的项目,并尝试使用步骤0中的ScriptRunner进行调试.

结果:项目编译(耶!),但我只能打到断点GradleScriptRunner.groovy.


2. Per Peter Niederwieser的答案使用特殊选项运行gradle CLI

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
Run Code Online (Sandbox Code Playgroud)
  1. 配置IntelliJ以连接到此端口并开始调试(参见图像): 我是如何配置调试器的

对于此步骤,我尝试了以下.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()
}
Run Code Online (Sandbox Code Playgroud)

结果:

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
Run Code Online (Sandbox Code Playgroud)

2.同时使用build.gradle和settings.gradle

--settings.gradle--

include "/path/to/gradle-js-plugin"
Run Code Online (Sandbox Code Playgroud)

--build.gradle--

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

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

repositories {
    mavenLocal()
    mavenCentral()
}
Run Code Online (Sandbox Code Playgroud)

结果:

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
Run Code Online (Sandbox Code Playgroud)


我的设置

摇篮

~# 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
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

的IntelliJ

IntelliJ IDEA Ultimate 117.499 w/ Bundled Gradle plugin
Run Code Online (Sandbox Code Playgroud)

希望

任何提示都会让我进入插件的调试模式.

Den*_*hev 28

我能够使用-Dorg.gradle.debug=true(在gradle论坛上找到)调试gradle源(包括插件):

  1. 如果有的话停止守护进程:

    ./gradlew --stop

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

  3. 远程连接到gradle进程(端口5005) - 如果使用IntelliJ IDEA,请参阅上面的OP图像

它现在应该停在断点上.


顺便说一下,我为gradle源创建了一个单独的IntelliJ IDEA项目.因为我使用gradle包装器,所以我从中获取了源代码

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

在IDEA我做了File->Import Project,然后选择了上面的路径,然后 - "从现有来源创建项目".点击下一次(确保我没有包含lib/plugins目录中的任何jar ,因为IDEA会抱怨大多数项目文件已经存在).

然后,我在该IDEA项目中创建了一个远程调试配置,并将其用于调试gradle.


Pet*_*ser 26

首先,听起来您的IDEA Gradle项目存在问题.如果你运行gradlew cleanIdea idea然后从IDEA打开生成的项目(而不是使用JetGradle插件),一切都应该没问题.

其次,如果仍然无法获得GradleMain/GradleLauncher(前一类确实存在)的工作方法,另一种方法是将Gradle构建作为外部应用程序进行调试.为此,您需要添加-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005GRADLE_OPTS环境变量,从命令行运行构建,等待它暂停,然后从IDEA启动"远程"运行配置(具有相应的设置).此时,调试器应连接到Gradle进程,您应该已启动并运行.


den*_*nov 16

IntelliJ IDEA 12.1提供了现成调试gradle任务的功能 - 右键单击​​JetGradle工具窗口任务列表中的目标任务,然后选择"debug"