似乎有debugging Play个应用with IntelliJ IDEA的大量文档,但它们都假设Play是使用SBT构建的。
使用Gradle进行调试应该像以下一样简单:
GRADLE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9999" gradlew --no-daemon :runPlayBinary
我遇到的问题是:断点从未被击中,处理继续正常进行。 技术:播放2.3.X,IDEA 14.1,Gradle 2.8,Scala 2.10
我一定错过了什么,它是什么?
答案 0 :(得分:5)
您将调试参数设置在错误的位置。在GRADLE_OPTS
中设置它定义了在运行Gradle时要使用的系统属性。由于Gradle启动了一个新的JVM进程来执行Play Framework应用程序,因此必须将这些属性传递给运行应用程序的JVM。
您可以使用PlayRun
任务添加JVM参数。像这样:
tasks.withType(PlayRun) {
forkOptions.jvmArgs = ['-Xdebug',
'-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9999']
}
但请注意,每次执行应用程序时,此设置都将设置调试模式。也许您应该添加一些参数来验证您是否需要调试模式。
之后,您通常可以在IDE中设置远程调试。
希望它有所帮助;)
答案 1 :(得分:1)
Play 2.7、Java 8、Gradle 组合需要以下内容:
运行它:gradle runPlay -Ddebug=true
play {
injectedRoutesGenerator = true
platform {
playVersion = playV
scalaVersion = scalaV
javaVersion = javaV
}
if (System.getProperty("debug")) {
def runPlayTask = tasks.findByName('runPlay')
runPlayTask.forkOptions.jvmArgs = ['-Xdebug', '-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005']
}
}```
答案 2 :(得分:0)
根据joao的回答,您可以创建一个新任务并使用远程配置连接到它:
task debugPlayBinary {
doLast {
def runPlayTask = tasks.findByName('runPlayBinary')
runPlayTask.forkOptions.jvmArgs = ['-Xdebug', '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005']
runPlayTask.run()
}
}
这允许runPlayBinary
保持不变。