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

2023-12-22

我们最近将我们的应用程序引擎项目按照以下结构转换为模块。这个新的开发工作流程的问题是,我们必须在每次更改时重建 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

在我们之前的工作流程中,对于整体应用程序,我们可以使用应用程序引擎的热重载功能,其中将自动选择 IDE(例如 Eclipse)中的代码修改。

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


我正在使用类似的结构,但略有不同。顶层目录有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

Tools

  • 没有 Google App Engine 插件(或 SDK)的 Eclipse Luna
  • Maven 3.2.1
  • 谷歌应用引擎 SDK 1.9.6

开发工作流程

  1. 如果您已经有源代码,请将其保存在其他位置并使用 mvn appengine 命令生成框架。
  2. 仅使用 maven 和终端以及 mvn appengine:devserver 命令,使用简单的 Hello World 运行第一个片段。
  3. 完成后,生成eclipse项目。
  4. 将 eclipse 项目导入为 Maven 项目。它将通过 Maven 查看 jar。我不会在 Luna 之前写下这个答案,因为它需要太多的调整。在 Luna 中,这会自动进行。
  5. 上面的步骤将创建三个项目,顶级项目、ear 项目和 war 项目,每个项目都带有 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>
    
  8. 注意 suspend=n。

  9. 使用 mvn appengine:devserver 从 eclipse 外部运行应用程序引擎从耳朵目录。我使用这个命令: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. In Eclipse, create a Debug Profile for your project under Remote Java Application - select the war project and socket attach options. This step is available on the internet at many places, here is an image nevertheless Debug Config, Remote Application, War Socket Attach

  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从外面。

我给出窗口列表(Eclipse、终端 1 和终端 2)的原因只是为了表明 Alt+Tab 实际上比 Eclipse 中的 Shift+F7 更快。这是主观的,当然取决于你。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

应用程序引擎 + 模块 + Maven 的开发工作流程 的相关文章

随机推荐

  • NSTask 启动路径不可访问。在 Xcode 中工作。 XCode 显示错误

    好的 关于堆栈溢出有几个与此相关的问题 这是唯一的问题 https stackoverflow com questions 8254680 nstask only returning standarderror in release bui
  • 谷歌数据流防火墙规则/网络标记

    我正在尝试从谷歌数据流批处理连接到cassandra 具有防火墙规则标签 此外数据流服务将创建带有 数据流 标记的工作人员 是否可以更改默认标签 或者添加更多标签 我认为目前无法更改数据流服务创建虚拟机所用的标签 但是 可以通过指定参数来控
  • 访问子表单数据表仅返回 1 个结果

    我知道这个问题已经以某种形式或方式被多次提出 但我无法找到有效的解决方案 这让我发疯 我正在 Access 中创建一个搜索表单 该表单通过 VBA 执行选择查询来查找表中的数据 到目前为止 这非常简单 查询有效 并且表单返回结果 问题是我正
  • Jenkins 管道可以有可选的输入步骤吗?

    是否可以创建带有可选输入阶段的 Jenkins 管道 下面的代码片段没有实现这个目标 预期行为 该阶段 以及输入提示 应该仅针对特定分支运行 实际行为 此阶段适用于所有分支机构 使用输入步骤时 when 过滤器将被忽略 stage Appr
  • 如何在OPenCV中计算32位浮点图像的图像直方图

    我想计算图像像素类型为 32F 32 位浮点 的直方图 calcHist 函数的参数值应该是什么 变暗 垃圾箱 范围 嗯 我已经这样做过很多次了 像这样 cv Mat matSrc this is a CV 32FC1 normalised
  • TFS项目可以互相引用吗?

    我最近开始在一个企业软件环境中工作 其中有数百个不同的应用程序 所有这些应用程序都局限于自己的 孤岛 我的任务之一是尝试将事情标准化一点 第一个尝试将是标准事件日志记录 目前 该公司的 标准 是 每个人都应该使用企业库进行日志记录 这实际上
  • z-index 在 ipad 上不能很好地工作

    我正在为朋友建立一个网站 http pasionesargentas com sm http pasionesargentas com sm 与带缩略图翻转的全屏图库 http tympanus net codrops 2011 02 09
  • css div高度100%问题?

    我想要一个 div 占据所有屏幕高度 这就是为什么我找到以下链接 http www webmasterworld com forum83 200 htm http www webmasterworld com forum83 200 htm
  • 重用PreparedStatement中的参数?

    我将一个参数传递给一个PreparedStatement 如下所示 public void getNodes String runId File file Connection conn PreparedStatement ps null
  • 我可以在 QNX 上使用 Java 吗?

    我必须侍奉两个主人 一个项目预计在 v1 0 后将一分为二 它最初是一个使用 FreeRTOS 用 C 语言编码的简单嵌入式项目 直到 v1 0 为止 后来 一位大师说我们必须使用QNX来取悦合作伙伴 否则就会失去交易 而另一位大师则说我们
  • 在 rmarkdown 中创建模板

    我正在尝试创建自定义模板 但它不会显示 我已经尝试跟随https bookdown org yihui rmarkdown template struct html https bookdown org yihui rmarkdown te
  • Power Query 为空时上移值

    目前 我在 Excel 中有一个大表 我想将其与动态下拉列表 级联选项 一起使用 根据您在第一个下拉菜单中所做的选择 然后在下一个单元格中 您应该有一个经过筛选的下拉菜单 此外 任何选项对于所选的主类别都是唯一的 我做的第一件事是获取我需要
  • fsock:无法找到套接字传输“http”

    我想用 fsock 发送后变量 但是当我尝试这个时 post arr array a gt b addr http 1 2 3 4 confirmation html fp fsockopen addr 80 errno errstr 30
  • 使用 CloudFormation 添加对 AWS websocket API 的集成响应

    AWS recently released Cloudformation support for templating websocket API gateways https aws amazon com about aws whats
  • JFreechart 中漂亮的饼图

    是否有可能在 JFreechart 中为饼图获得复杂 漂亮的颜色 我的意思是我怎样才能获得如图所示的颜色link http upload wikimedia org wikipedia commons b bf Ml wiki photo
  • SVG 错误:访问属性“someFunction”的权限被拒绝

    请看一下这个小提琴 http jsfiddle net arasbm Tyxea 14 http jsfiddle net arasbm Tyxea 14 正如你所看到的 我想在 SVG 元素上触发事件时对其进行转换 您可以单击箭头 它应该
  • 复制二进制文件的内容

    我正在设计一个图像解码器 作为第一步 我尝试复制使用 c 即打开文件 并将其内容写入新文件 下面是我使用的代码 while c getc fp EOF fprintf fp1 c c 其中 fp 是源文件 fp1 是目标文件 程序执行时没有
  • 字母数字和 + 字符的正则表达式

    我需要一个仅允许字母数字加上 和 字符的正则表达式 现在我正在使用 w 以下模式将匹配仅包含字母 数字 或 的字符串 包括 或 等国际字符 并且不包括 中包含的 字符 w p L p N 例子 string pattern p L p N
  • Azure AD 的访问令牌颁发者是 sts.windows.net 而不是 login.microsoftonline.com

    我正在尝试验证从 azure Active Directory 获取的访问令牌 我从以下位置获得了令牌https login microsoftonline com my tennant guid v2 0 返回的令牌中的发行者是https
  • 应用程序引擎 + 模块 + Maven 的开发工作流程

    我们最近将我们的应用程序引擎项目按照以下结构转换为模块 这个新的开发工作流程的问题是 我们必须在每次更改时重建 EAR 并重新启动应用程序引擎本地开发服务器 这使得每次我们更改代码并想要测试它时 我们都会浪费 30 秒到一分钟的时间 com