You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Intellij/GWT 使用外部Jetty启动开发模式如何避免permutations预编译

你遇到的Jetty启动阶段执行permutation编译的问题,本质是构建流程将GWT全量编译任务绑定到了war打包或Jetty启动前的生命周期,和GWT开发模式的设计逻辑无关——GWT开发模式本身确实不需要Jetty阶段做任何编译工作,所有编译都可以交给独立的代码服务器完成。

解决方案

1. 预生成开发模式必需的引导文件

MyProject.nocache.js、MyProject.devmode.js等引导文件不需要全量permutation编译即可生成,你可以提前一次性生成固定下来:

  • 执行一次GWT开发模式启动命令,添加-noserver参数,等控制台输出「代码服务器准备就绪」后直接关闭进程
  • 到编译输出目录提取完整的MyProject目录,拷贝到webapp的静态资源目录下,不需要每次构建都重新生成

2. 构建及Jetty启动阶段完全跳过GWT编译

保持-Dgwt.compiler.skip=true参数,同时调整构建配置:

  • 若使用gwt-maven-plugin/gradle-gwt-plugin,给插件添加<skip>true</skip>(对应Gradle为skip = true)配置,解除插件和package等构建生命周期的绑定
  • 移除Jetty启动脚本中所有触发GWT编译的钩子逻辑
    配置完成后Jetty启动仅加载业务服务,耗时可稳定在30秒左右,且不会缺失引导文件。

3. 单独启动GWT代码服务器

使用如下命令启动独立的GWT代码服务器即可:

gwt-dev -noserver -war /你的webapp静态资源路径 -startupUrl http://你的Jetty服务访问地址 com.你的项目包名.MyProject

运行时浏览器加载Jetty返回的引导文件后,会自动关联到独立的代码服务器,仅在需要时做增量编译,不会生成多余的permutation。

额外优化:减少开发阶段不必要的permutation生成

在MyProject.gwt.xml中添加以下配置,彻底合并多余的编译分支:

<!-- 仅保留开发用浏览器内核 -->
<set-property name="user.agent" value="safari" />
<!-- 锁死locale等其他会拆分permutation的属性 -->
<set-property name="locale" value="default" />
<set-property name="formfactor" value="desktop" />
<!-- 合并所有属性,仅生成1个permutation -->
<collapse-all-properties />

配置完成后就算手动触发全量编译,也只会生成1个permutation,编译耗时可缩减到原有的1/5甚至更少。

内容的提问来源于stack exchange,提问作者Alays

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:45:03