应用引擎+模块+ maven的开发工作流程

use*_*128 8 google-app-engine maven

我们最近根据以下结构将我们的app引擎项目转换为模块.这个新的开发工作流程的问题是我们必须在每次更改时重建EAR并重新启动应用程序引擎本地开发服务器.每次我们对代码进行更改并想要测试时,这会使我们松散30分钟到一分钟.

/commons
 -pom.xml
/model
 -pom.xml
/webapp //app engine module
 -pom.xml
/apis //app engine module
 -pom.xml
/ear
 -pom.xml
pom.xml //main (parent) project pom
Run Code Online (Sandbox Code Playgroud)

在我们之前的工作流程中,使用单片应用程序,我们可以使用app引擎的热重新加载功能,其中自动拾取修改IDE中的代码(例如eclipse).

在这种情况下,你们推荐什么作为最好的maven配置和/或dev工作流程?理想情况下,任何模块的更改都不需要完全重建项目.

Poo*_*C20 8

我使用的是类似的结构,但差别很小.顶级目录有war和ear,然后它们包含特定的pom.xml.我使用Eclipse进行调试,我能够"大部分时间"进行热部署,而且我没有使用Eclipse插件,我知道这是你想要的.

目录结构

.
|-- pom.xml
|-- README.md
|-- my-ear
|   |-- devpid
|   |-- pom.xml
|   `-- src
|       `-- main
|           `-- application
|               `-- META-INF
`-- my-war
    |-- build
    |   `-- classes
    |       |-- main
    |       |   |-- java
    |       |   `-- webapp
    |       `-- test
    |           `-- java
    |-- pom.xml
    `-- src
        |-- main
        |   |-- java
        |   |   `-- com
        |   `-- webapp
        |       |-- css
        |       |-- favicon.ico
        |       |-- index.html
        |       |-- js
        |       |-- test.html
        |       `-- WEB-INF
        `-- test
            `-- java
Run Code Online (Sandbox Code Playgroud)

工具

  • Eclipse Luna没有Google App Engine插件(或SDK)
  • Maven 3.2.1
  • Google App Engine SDK 1.9.6

开发工作流程

  1. 如果您已经拥有源代码,请将其保存在其他位置并使用mvn appengine命令生成骨架.
  2. 使用maven和terminal以及mvn appengine:devserver命令,使用简单的Hello World运行第一个剪切.
  3. 完成后,生成eclipse项目.
  4. 将eclipse项目导入为Maven项目.它将通过Maven看到罐子.我不会在Luna之前写这个答案,因为它需要太多的调整.在Luna中,这会自动生效.
  5. 上面的步骤将创建三个项目,顶级,耳朵和战争,每个项目都有pom.xml - 没关系.
  6. 在eclipse中,将输出目录提供为war/target目录.这是使热部署成为可能的步骤.
  7. 在maven ear/pom.xml中,将xArgs添加到appengine插件以便在调试模式下运行.

    <plugin>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-maven-plugin</artifactId>
        <version>${appengine.target.version}</version>
        <configuration>
            <jvmFlags>
            <jvmFlag>-Xdebug</jvmFlag>
                <jvmFlag>-Xrunjdwp:transport=dt_socket,address=1044,server=y,suspend=n</jvmFlag>
            </jvmFlags>
            <disableUpdateCheck>true</disableUpdateCheck>
        </configuration>
    </plugin>
    
    Run Code Online (Sandbox Code Playgroud)
  8. 注意suspend = n.

  9. 使用来自ear目录的 mvn appengine:devserver eclipse外部运行app引擎.我使用这个命令: mvn appengine:devserver > ~/.logs/.appengine.devserver.logs & echo $! > devpid 让我们称这个终端1.
  10. 这种方法的一个优点是Eclipse不会捕获你的控制台,所以你可以自由地使用你选择的工具来查看它,比如multitail等.我使用这个简单的tail命令: tail -f ~/.logs/.appengine.devserver.logs | sed 's/INFO/^[[0;34m&^[[0m/g;s/ERROR/^[[0;31m&^[[0m/g;s/WARN\|WARNING/^[[0;35m&^[[0m/g;s/SEVERE\|FATAL/^[[0;31;47m&^[[0m/g' 上面是一个难以输入的命令.^ [的每个实例实际上是Ctrl + V Esc - 值得输入一次的努力.但这当然是主观的,取决于你.
  11. 在Eclipse中,在Remote Java Application下为项目创建调试配置文件 - 选择war项目和套接字附加选项.这个步骤可以在互联网上的很多地方找到,但这里仍然是一个图像 调试配置,远程应用程序,战争套接字附加

  12. 打开另一个终端,war目录中的Terminal 2并保持打开状态,以便mvn compile install在需要时运行.

  13. 你已准备好出发.您应该能够通过在适当的位置粘贴源代码来集成它们.您还应该能够使用标准调试技术.Eclipse将在正确的位置编译,devserver将检测它.如果Eclipse抛出警告,请忽略它.
  14. 这大部分时间都有效.有时,您会保存一些会破坏整个项目编译的内容,或者更改从预编译类调用的函数名称,或者只需更改启动时加载的web.xml.当然,热部署不起作用.
  15. 在这种情况下,从eclipse中停止删除调试,完成任务,mvn compile install从终端2 运行.Devserver将自动检测.
  16. 大多数情况下,我几乎不需要触摸终端1中运行的尾部.Devserver不需要重启.
  17. 除非我改变web.xml或重构,否则我不需要mvn compile install从外部运行.

给出Windows列表(Eclipse,终端1和终端2)的原因只是为了表明Alt + Tab实际上比eclipse中的Shift + F7更快.这是主观的,当然由你决定.