应用程序引擎 + 模块 + 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 的开发工作流程 的相关文章

  • maven:没有主要清单属性

    我正在开发我的 web java 项目 当我尝试运行由 maven 构建的 java jar 文件时 出现错误 no main manifest attribute in project name 我认为原因是maven找不到我的主类 我创
  • 使用 Maven 对 Android 进行单元测试

    我有一个关于使用 Maven 构建的 android 项目的问题 我们让它运行我们的活动测试 但现在我们需要它来运行单元测试 单元测试与活动测试位于同一项目中 我如何在 pom xml 文件中设置它 这是父 Pom xml 文件
  • Golang Appengine 项目无法构建

    我有一个使用 golang 的应用程序引擎项目 我已经大约一年没有碰过了 我现在无法让它在之前构建的机器上构建 我收到以下错误 go app builder 解析输入失败 解析器 src golang org x net internal
  • PubSubHubBub 集线器

    我目前正在构建一个基于 PubSubHubBub 协议的实时 Web 应用程序 但是 我遇到了几个问题 首先 我正在寻找可以在我的服务器上运行的集线器应用程序 有几个应用程序 但大多数还不成熟 或者不支持 0 3 规范 官方的 google
  • 为什么我的 Maven 在 Ubuntu 上这么慢?

    我在 Ubuntu 服务器上有 Maven 它似乎尝试了很多很多的地方来下载 但是下载超时了 但是超时需要很长时间 所以我的整个构建花了一个多小时 Downloading http scala tools org repo releases
  • Maven 的默认构建配置文件

    我已将分析添加到我的 Maven 项目中
  • 连接超时:Nodejs Google App Engine 到 Cloud MySql

    该代码非常基础 使用 mysql 的简单 Nodejs 应用程序 Error connect ETIMEDOUT当代码尝试连接到 Google App Engine 上的 Google Cloud MySql 服务器 第二代 时收到 但是应
  • GAE SDK 1.9.5 和 InvalidCertificateException

    尝试在 osX Maverics 10 9 5 上使用 Python2 7 8 从 GAE SDK 1 95 导入测试床 我收到 InvalidCertificateException 错误 from google appengine ex
  • Maven 项目无法在 Tomcat 7 上运行

    我正在尝试在 Tomcat 7 上运行 Maven 项目 但它似乎不起作用 当我从命令提示符输入时mvn clean tomcat7 run 我收到此错误 SEVERE A child container failed during sta
  • 使用依赖项的资源?

    在我的 Maven 项目中 有一个模块 核心 为其类提供了一些资源 当在模块内运行类时 它能够获取自己的资源 一切正常 当另一个依赖于核心的模块尝试运行该类时 就会出现问题 Java在其中寻找资源的文件夹是这个模块 而不是核心模块 所以这门
  • 将 Maven 控制台与 m2eclipse 一起使用

    Maven 新手在这里 有没有办法在 Eclipse 中打开控制台并在 M2Eclipse 插件上执行 Maven 命令 这是一个非常好的插件 但我环顾四周 没有找到我想要的一些功能 谢谢 如果你想运行特定的maven插件 你可以这样做 g
  • 多模块项目的 Maven 阶段顺序?

    对不起 我是 Maven 的菜鸟 这是我的maven项目目录 project pom xml moduleA moduleB sub moduleA sub moduleB sub moduleC moduleC 当然 每个模块和子模块内都
  • 如何使用 Maven 和 wsimport 从 wsdl 生成类?

    当我尝试运行 mvngenerate sources 时 这是我的输出 SLF4J Failed to load class org slf4j impl StaticLoggerBinder SLF4J Defaulting to no
  • Maven 中的 Java EE 7 First Cup 教程错误:找不到工件 org.glassfish.javaeetutorial.firstcup:firstcup:pom:7.0.1-SNAPSHOT

    我正在关注 FirstCup 的 Java EE 7 更新版本 我安装了 glassfish 4 并使用 NetBeans 7 3 我正在研究第一个示例 但遇到了 Maven 问题 我生成了原型并能够创建 dukes age 项目 然而它有
  • Jenkins:从神器部署战争文件

    我们正在使用Jenkins建立 maven 并部署工件 JAR 和 WAR s 到内部工件服务器 快照和版本 对于部署 目前 我们有 Jenkins 作业来打包 war 文件 来自发布 scm 标签 并部署到不同的环境 服务器 我们想要跳过
  • gcloud.app.deploy 错误响应:[9] 应用程序启动错误:[email protected] start /app 节点 app.js

    我对收到的错误消息感到好奇 环境 谷歌应用引擎 Nodejs 弹性环境 没有安装 Express 服务器 设置 app yaml 包含标准信息 server js 已创建但为空 此时此刻 app js 已创建 但目前为空 错误 错误 gcl
  • 如何默认将 Maven 插件附加到阶段?

    我有一个 Maven 插件应该在编译阶段运行 所以在项目中consumes我的插件 我必须做这样的事情
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 在本地 SDK 服务器上工作时,实时 Google App Engine 上出现 404

    我已经在GAE标准环境上部署了几个PHP应用程序 一切正常 现在我正在部署一个新应用程序 该应用程序位于由gcloudSDK按预期工作 终端命令 dev appserver py log level warning app yaml 问题是
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项

随机推荐

  • 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