GWT 2.7.0+Maven环境下Super Dev Mode无法编译最新源码求助
问题分析与解决方案
原理解析
你的问题核心在于GWT Super Dev Mode(SDM)的代码编译源配置:
- 当你执行
mvn gwt:run-codeserver时,默认情况下GWT Maven插件会依赖Maven的compile阶段,将src/main/java下的源码复制/编译到target目录,然后Codeserver从这个target目录读取代码进行编译。 - 第一次启动时,
compile阶段同步了最新代码到target,所以浏览器能显示修改;但后续修改src/main/java后,没有自动触发Maven将更新同步到target,导致点击编译书签时,Codeserver还是用的target里的旧代码,自然看不到变更。
解决方案
要解决这个问题,我们需要让GWT Codeserver直接监听源码目录(而非target),同时配置Maven支持增量编译确保修改能被及时识别。
步骤1:修改pom.xml中的GWT Maven插件配置
在<build><plugins>中添加或完善gwt-maven-plugin的配置,明确指定源码目录并启用增量编译:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>gwt-maven-plugin</artifactId> <version>${gwt.version}</version> <executions> <execution> <goals> <goal>compile</goal> <goal>test</goal> <goal>run-codeserver</goal> </goals> </execution> </executions> <configuration> <!-- 替换为你的GWT模块全路径 --> <module>com.yourproject.YourGwtModule</module> <!-- 让Codeserver直接监听源码目录,跳过target依赖 --> <sources> <source>src/main/java</source> </sources> <!-- 启用增量编译,提升SDM编译效率 --> <incremental>true</incremental> <superDevMode>true</superDevMode> <!-- 可选:配置Codeserver的绑定地址和端口 --> <bindAddress>0.0.0.0</bindAddress> <port>9876</port> </configuration> </plugin>
步骤2:配置Maven编译插件支持增量同步
同时确保maven-compiler-plugin启用增量编译,让修改后的源码能被快速同步:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> <encoding>${project.build.sourceEncoding}</encoding> <!-- 启用增量编译,自动识别源码变更 --> <incremental>true</incremental> </configuration> </plugin>
步骤3:验证修复
- 停止当前运行的Codeserver进程
- 执行
mvn gwt:run-codeserver重新启动SDM - 修改
src/main/java中的客户端GWT代码,点击浏览器的编译书签,刷新后就能看到最新变更了
额外说明
如果不想修改插件配置,也可以在每次修改源码后手动执行mvn compile同步到target,但这种方式效率较低,不如直接配置Codeserver监听源码目录来得方便。
内容的提问来源于stack exchange,提问作者trf
相关产品推荐
相关产品推荐

