如何从IDEA + Gradle调试AppEngine本地服务器?

时间:2014-07-24 18:45:51

标签: google-app-engine intellij-idea gradle

我正在关注Udacity App Engine课程,但作为修补程序,我正在使用Gradle和IDEA(开源版)。

我已使用以下build.gradle文件

成功设置了项目
buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.google.appengine:gradle-appengine-plugin:1.9.7'
    }
}

apply plugin: 'war'
apply plugin: 'appengine'

sourceCompatibility = 1.8
version = '1.0'

appengine {
    daemon = true
    downloadSdk = true

    appcfg {
        oauth2 = true
    }
}

repositories {
    mavenCentral()
    mavenLocal()
}

dependencies {
    appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.7'

    compile 'com.google.inject:guice:3.0'
    compile 'com.googlecode.objectify:objectify:5.0.3'
    compile 'com.google.appengine:appengine-api-1.0-sdk:1.9.7'
    compile 'com.google.appengine:appengine-endpoints:1.9.7'
    compile 'javax.servlet:servlet-api:2.5'
    compile 'javax.inject:javax.inject:1'

    testCompile 'junit:junit:4.11'
    testCompile 'com.google.appengine:appengine-testing:1.9.7'
    testCompile 'com.google.appengine:appengine-api-stubs:1.9.7'
}

我使用带有appengineRun配置的Gradle运行配置从IDEA运行本地开发服务器,并使用appengineStop的其他任务停止它。这是有效的,但我无法调试,因为我放的断点没有被击中。

我认为断点的这个问题是因为IDEA不知道(我在双关语中很恐怖)它必须挂钩支持AppEngine服务器的Jetty服务器,但这是一个疯狂的镜头,因为我不知道IDEA的内部,更不用说它如何处理Gradle执行。

如何重获断点能力?没有自定义插件是否可行?

2 个答案:

答案 0 :(得分:10)

首先,您必须在build.gradle文件中设置JVM调试参数,以便能够远程调试本地开发服务器。

appengine {
    ...
    jvmFlags = ['-Xdebug', '-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000']
}

然后,您需要在IntelliJ IDEA中创建一个运行/调试配置(基于以上参数),以用于远程运行或调试过程。远程运行/调试使您可以连接到正在运行的JVM。

您可以找到更多详情here。但基本上转到运行/编辑配置... ,在对话框中单击添加新配置(+)并选择远程。确保配置与JVM标志(尤其是端口)匹配。保存并关闭对话框。

启动本地开发服务器并连接调试器(运行/调试)。

答案 1 :(得分:0)

配置

将jvmFlags放在build.gradle

  appengine {
        run {
            jvmFlags = ['-Xdebug', '-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000']
        }
    }

调试

  • 在Gradle上执行appengineRun,然后等待服务器启动
    • 选择运行\附加到进程...以附加到服务器并进行调试