【问题标题】:How to auto reload app engine dev server?如何自动重新加载应用引擎开发服务器?
【发布时间】:2014-09-20 10:17:17
【问题描述】:

我正在关注tutorial on the App Engine website for 'Google Cloud Endpoints' in Java。一切正常,我可以使用mvn appengine:devserver 运行开发服务器。问题是当我对文件(例如,任何 java 文件)进行任何更改时,开发服务器不会自动重新编译。我需要 ctrl-c 来终止开发服务器并为我所做的每一次代码更改重新启动它。

有没有办法让 maven 自动检测我项目中任何文件的更改并让它自动重建并重新启动开发服务器?

【问题讨论】:

  • 嗨,我也遇到了同样的问题。但是你用 Ctrl+C 杀死开发服务器是什么意思?我该怎么做呢?控制台中的Ctrl+C?
  • @user3259937,Ctrl+C 是在 Windows 上使用的命令,用于在命令提示符或 Maven shell 中中止正在运行的进程。这样您就可以通过 'mvn appengiine:devserver' 再次启动服务器

标签: java google-app-engine maven


【解决方案1】:

很遗憾,没有。如果您希望在您的开发服务器上实现此行为,则需要使用 Python。

我遇到了同样的问题,App Engine 没有提供真正的解决方法来帮助您执行此操作。

来自“使用 Eclipse 的 Google 插件”:

使用 Eclipse,您可以在对源代码、JSP、静态文件和 appengine-web.xml 进行更改时让服务器在调试器中运行。当您保存对源代码的更改时,Eclipse 会自动编译该类,然后尝试将其动态插入到正在运行的 Web 服务器中。在大多数情况下,您只需在浏览器中重新加载页面即可测试新版本的代码。对 JSP、静态文件和 appengine-web.xml 的更改由开发服务器自动识别,并且无需重新启动服务器即可生效。如果更改 web.xml 或其他配置文件,必须停止并启动服务器才能使更改生效。

(https://developers.google.com/appengine/docs/java/tools/eclipse#Running_the_Project)

Java 中没有任何可比性(来自“Java 开发服务器”的链接)(https://developers.google.com/appengine/docs/java/tools/devserver)

【讨论】:

  • 啊,这听起来很糟糕。每次我想尝试新的代码更改时,必须手动停止和启动开发服务器,这使得开发人员的工作流程变得更慢。
  • 是的,这真的很不幸。我猜它来自于在编译 java 时解释 python 的事实。但我明白了,将你的整个代码推送到开发服务器以进行一点小改动真的很糟糕
  • 如果 Java 开发服务器能够检测到代码更改、关闭自身、重新编译并重新启动自身,那就太好了。不会像 python 那样快,但这会在工作流程中节省很多麻烦。我几乎选择了 Go,因为它支持这种迭代开发,但不幸的是不支持 Cloud Endpoints。
  • 是的,在他们的 SDK 中添加对他们来说是一个不错的功能。我不确定他们会不会:(只能希望
【解决方案2】:

App Engine SDK 目前没有在文件更改时自动重启的功能,但这并不是说您不能这样做。我遇到了同样的问题并编写了一个脚本来监听文件更改作为重新启动 App Engine 的触发器。它在 JavaScript 中,所以如果你还没有的话,你需要install Node.js

// Install watch-exec
$ npm install -g watch-exec

// Watch the current directory
$ watch-exec --command "mvn appengine:devserver" --watch .

这将立即启动 App Engine,然后在文件更改时重新启动它。如果应用因某种原因崩溃,脚本将等待您的下一次编辑,然后再尝试重新启动。


附:整个脚本大约有 40 行代码,您可能可以在其他脚本语言中做同样的事情。如果您以前没有尝试过编写自己的自动化程序,我绝对建议您查看source code 以了解其工作原理。

【讨论】:

    【解决方案3】:

    我发现使用 Gradle、GAE 和 Spring MVC,assemble 命令会将正确的工件放置到位,并且服务器将重新初始化应用程序。这比重新启动服务器要快一些。

    【讨论】:

    • 嗨@Neill,您能否详细说明您的答案,我所拥有的项目设置正是您所提到的。因此,如果您能就您如何实现这些细节提供见解,那将对我有所帮助。
    • explodeWar 是更新正在运行的服务器的更好的 gradle 任务,请参见此处:cloud.google.com/appengine/docs/standard/java/tools/gradle
    猜你喜欢
    • 2017-06-07
    • 2017-05-03
    • 2011-06-01
    • 2012-08-24
    • 1970-01-01
    • 2016-04-09
    • 2011-03-08
    • 1970-01-01
    • 2018-06-01
    相关资源
    最近更新 更多