我们最近根据以下结构将我们的应用引擎项目转换为模块。这个新的开发工作流程的问题是我们必须在每次更改时重建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
在我们之前的工作流程中,使用单片应用程序,我们可以使用app引擎的热重新加载功能,其中自动拾取修改IDE中的代码(例如eclipse)。
在这种情况下,你们推荐什么作为最好的maven配置和/或dev工作流程?理想情况下,任何模块的更改都不需要完全重建项目。
答案 0 :(得分: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
在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>
注意suspend = n。
mvn appengine:devserver > ~/.logs/.appengine.devserver.logs & echo $! > devpid
我们称之为1号航站楼。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 - 值得输入一次的努力。但这当然是主观的,取决于你。 在Eclipse中,在Remote Java Application下为项目创建调试配置文件 - 选择war项目和套接字附加选项。这个步骤可以在互联网上的许多地方找到,但这里仍然是一个图像
在war目录中打开另一个终端,即终端2并保持打开状态,以便在需要时运行mvn compile install
。
mvn compile install
.Devserver将自动检测。mvn compile install
。 我给出窗口列表(Eclipse,终端1和终端2)的原因只是为了表明Alt + Tab实际上比eclipse中的Shift + F7更快。这是主观的,当然由你决定。