如何让 Eclipse 和 mvn appengine:devserver 相互通信?
Posted
技术标签:
【中文标题】如何让 Eclipse 和 mvn appengine:devserver 相互通信?【英文标题】:How do I make Eclipse and mvn appengine:devserver talk to each other? 【发布时间】:2012-12-05 04:30:57 【问题描述】:我正在从Google Plugin for Eclipse 切换到Google 官方App Engine Maven Plugin。
我希望,我无法弄清楚的最后一件事是如何设置良好的调试工作流程。当我使用 GPE 时,我只是设置了断点,调试器会自动停在那里,但是当我通过 mvn appengine:devserver
运行开发服务器时,我认为开发服务器和 eclipse 不知道彼此。
如何让他们互相交谈?
【问题讨论】:
it-worx.blogspot.com/2010/03/… 另见***.com/questions/13915341/…,其中有来自插件开发者@Google 的回复。 请注意,通过链接 in this answer,您可以配置您的 mavenized gae 项目以使用本机 GPE 运行/调试选项来运行/调试项目,即Debug As - Web Application
。
【参考方案1】:
第一个选项是将您的项目设置为使用 WTP,如 @https://cloud.google.com/appengine/docs/java/webtoolsplatform 所记录的那样。这是我切换到的方法。
第二个选项是使用两个调试配置。
第一个调试配置将运行您的 maven 目标,即appengine:devserver
。
第二个是Remote Java Application
配置,将调试客户端连接到devserver jvm。
这也需要将一些 jvm 参数传递给 maven 目标。
<!-- GAE plugin -->
<plugin>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>1.7.5-SNAPSHOT</version>
<configuration>
<jvmFlags>
<jvmFlag>-Xdebug</jvmFlag>
<jvmFlag>-Xrunjdwp:transport=dt_socket,address=1044,server=y,suspend=y
</jvmFlag>
</jvmFlags>
<disableUpdateCheck>true</disableUpdateCheck>
</configuration>
</plugin>
一旦这 3 件事到位,运行 maven 调试配置,然后运行调试客户端配置,然后运行您的应用程序。
目前尚不支持热插拔,因此如果您更改任何非资源文件(任何 java 源),开发服务器将看不到它们。资源文件将被部署(静态文件:html、js)。
【讨论】:
感谢分享(并推动插件更新)。 “wait”和“disableUpdateCheck”有什么作用? disableupdatecheck 阻止插件询问 google 是否有新版本的 sdk。等待什么也没做。 您需要使用插件的快照版本才能使其工作。 嗨。这种方法有效,但有点麻烦,因为您必须从 eclipse 中开始启动配置。此外,在更改服务器代码中的某些内容时,您不会被警告重新启动服务器。难道没有办法在调试模式下简单地启动 mvn appengine:devserver 目标吗? 另外,当使用两个启动配置方法时...... mvn 启动配置启动两个 jvm,当我杀死正在运行的 appengine 时只有一个被终止,所以我总是有一个陈旧的 java 进程在运行。【参考方案2】:您应该在 debug 模式下从 eclipse 执行 mvn。
在 Eclipse 中,您可以从 Eclipse 顶部工具栏“运行”->“调试配置”->“Maven 构建”配置此类 Maven 构建命令
一旦在 Maven 中以 Eclipse 调试模式启动,您应该能够命中断点。
编辑 - 另一种选择是设置远程调试,即“运行”->“调试配置”->“远程 Java 应用程序” 并侦听远程调试端口,即您应该确保 appengine:devserver 使用远程调试端口启动参数 - 参考 - Remote Debugging in eclipse
【讨论】:
使用 appengine:devserver 的目标,这似乎没有什么区别。我在 Eclipse 控制台中看不到输出,也没有遇到断点。开发服务器确实启动了,应用程序按预期运行,但没有调试。 我认为 webapp 正在一个新线程中运行,eclipse 没有在看/听。【参考方案3】:这个question 可能会给你一些问题的提示。 Maven appengine:devserver 在单独的进程中启动开发服务器。然而,Eclipse 只知道 Maven 进程本身(这是您在调试视图中看到的)。此外,由于无法使用调试端口等参数启动开发服务器,因此它可能永远无法连接到调试器。
链接的问题表明有一个非官方的 Maven GAE 插件可以接受参数。还有一张用于增强官方插件的新票,以及插件开发者承诺很快实现此功能。
【讨论】:
你指的是code.google.com/p/googleappengine/issues/detail?id=8558吗? 第一个问题是一个比较普遍的Eclipse-GAE-Maven集成问题。第二个问题更具体,但将有助于实现这一目标。我指的是第二个问题。【参考方案4】:我会看看我还能做些什么来使 eclipse 集成更容易,但是现在有更新到 appengine-maven-plugin 项目的问题:http://code.google.com/p/appengine-maven-plugin/issues/detail?id=3&can=1 所以看看支持因为 jvm 参数可以帮助你。
请让我知道你的经历,我总是支持很棒的事情。
【讨论】:
搞定了!在eclipse中需要2个debug配置,一个执行maven目标,一个连接eclipse调试器,不过还算可以接受。 我希望看到更多功能来改进代码/执行/调试周期,包括增量构建和/或热部署到开发服务器。 查看code.google.com/p/appengine-maven-plugin/issues/list,如果我们已经遇到问题,请告诉我。如果没有,请随意创建一个。让这件事变得更容易会很棒。 热插拔功能:code.google.com/p/appengine-maven-plugin/issues/detail?id=17【参考方案5】:2015 年相关回答
我在 2015 年 9 月创建了一个 GAE (Java) 项目,以下内容适用于该项目和类似项目。
我首先使用 Skeleton 原型创建我的项目,就像在普通 GAE maven 项目上一样,只需按照Using Apache Maven - Java — Google Cloud Platform 中的相关步骤进行操作。从Requirements 一直到Testing your app with the development server。
之后,我使用“导入现有 Maven 项目”将该项目导入 Eclipse JEE (Mars)。开始开发。
当我需要调试时,我只需要执行下面介绍的几个步骤。
创建调试配置
转到 Run -> Debug Configurations,点击 Remote Java Application 并通过点击 New 按钮创建新配置(参见截图,过滤器文本框上方的左上角)。
通过选择您的特定项目并为配置指定一个合适的名称来填写详细信息,如下所示(让端口为 8000),然后单击应用:
在 pom.xml 中取消注释一些行
在您项目的 pom.xml 中,找到插件 appengine-maven-plugin
的配置并取消注释以下行:
<jvmFlags>
<jvmFlag>-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n</jvmFlag>
</jvmFlags>
从命令行运行mvn appengine:devserver
命令
正如标题所说...
在 Eclipse 中附加调试器
单击Debug按钮旁边的小三角形,然后选择您刚刚设置的调试配置的名称(在我的示例中为“HelloWorldServlet”)。
【讨论】:
【参考方案6】:我大致按照@developers.google.com/appengine/docs/java/webtoolsplatform的步骤来支持我之前的方法。
【讨论】:
以上是关于如何让 Eclipse 和 mvn appengine:devserver 相互通信?的主要内容,如果未能解决你的问题,请参考以下文章
如何在eclipse中使用mvn clean install
mvn install 下载的jar文件放在哪里? 如果我要在eclipse里面使用mvn下载的jar文件 怎么引用