【问题标题】:How to debug the AppEngine local server from IDEA+Gradle?如何从 IDEA+Gradle 调试 AppEngine 本地服务器?
【发布时间】:2014-07-24 18:45:50
【问题描述】:

我正在学习 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 服务器的码头服务器,但这是一个疯狂的尝试,因为我不知道 IDEA 的内部,更不用说它如何处理 Gradle 执行了。

我怎样才能恢复断点能力?没有自定义插件可行吗?

【问题讨论】:

  • 您有没有发现更好的方法?因为有两个阶段的调试过程有点烦人。
  • 不。我只是对 Java Web 开发感到好奇,所以我几乎没有触及它的表面。 .Net 开发者的核心。对不起。

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


【解决方案1】:

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

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

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

您可以找到更多详细信息here。但基本上转到Run / Edit Configurations...,在对话框中点击Add New Configuration (+) 并选择Remote。确保配置匹配 JVM 标志(尤其是端口)。保存并关闭对话框。

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

【讨论】:

    【解决方案2】:

    配置

    将 jvmFlags 放在 build.gradle 上

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

    调试

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-09
      相关资源
      最近更新 更多