42

问题

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

具体来说,我正在尝试调试对gradle-js-plugin 的本地更改, IntelliJ 说它找不到. (我在想也许这与它们的加载方式有关,但这是一个猜测。)com.google.javascript.jscomp.CompilerOptionsspock.lang.Specification


我尝试过的事情

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

0. 我的第一个猜测

我在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"
        )
    }
}

根据GradleLauncher 的文档

结果: IntelliJ 不会编译该项目。


1. Per Peter Niederwieser 的回答Fix idea project & debug via plugin

脚步

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

结果:项目编译(耶!),但我只能在GradleScriptRunner.groovy.


2. Per Peter Niederwieser 的回答run gradle CLI w/special options

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 以连接到此端口并开始调试(见图): 我如何配置调试器

对于这一步,我尝试了以下 .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 -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 -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 IDEA Ultimate 117.499 w/ Bundled Gradle plugin

希望

任何能让我在插件中进入调试模式的提示。

4

3 回答 3

33

我能够使用-Dorg.gradle.debug=true在 gradle forum 上找到)调试 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,然后选择了上面的路径,然后 - “从现有来源创建项目”。点击 Next 几次(确保我没有包含lib/plugins目录中的任何 jar,因为 IDEA 会抱怨大多数项目文件已经存在)。

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

于 2014-06-11T15:14:20.797 回答
28

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

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

于 2012-06-20T23:42:03.723 回答
18

IntelliJ IDEA 12.1 提供开箱即用调试 gradle 任务的能力 - 右键单击​​ JetGradle 工具窗口任务列表中的目标任务并选择“调试”

于 2013-03-28T08:54:28.833 回答