GWT2.9.0+GXT4.1.0+Java11运行Super Dev Mode报源路径错误
GWT 2.x默认仅扫描模块描述文件(.gwt.xml)所在包下的client子包作为可转译JS的客户端源码路径,你的项目未使用Maven默认源码目录src/main/java,也未遵循默认的client子包结构,同时未显式声明自定义源码路径,就会触发该提示。
按以下顺序配置即可修复:
1. 注册Maven自定义源码目录
你把源码放在了非标准路径,首先要让Maven和Eclipse识别这两个目录为源码根,否则编译和插件运行都会出现类找不到的问题。
在pom.xml的build节点下添加build-helper插件配置,原有gwt-maven-plugin等配置全部保留:
<build> <!-- 原有配置保留 --> <plugins> <!-- 原有插件保留,新增以下插件 --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>add-custom-source</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>src/main/src-client</source> <source>src/main/src-common</source> </sources> </configuration> </execution> </executions> </plugin> </plugins> </build>
配置完成后在Eclipse中右键项目,执行Maven -> Update Project,确认两个自定义源码目录图标上出现package标识,代表已经被IDE识别为源码根。
2. 修改GWT模块配置文件
两个.gwt.xml文件必须分别放在对应源码目录的根包下(比如你的根包是com.example,那Common.gwt.xml放在src/main/src-common/com/example/下,Main.gwt.xml放在src/main/src-client/com/example/下,不能放在无包的默认路径),然后分别添加source声明:
- 编辑Common.gwt.xml,保留原有inherits等配置,新增源码路径声明,代表当前模块所在包及所有子包都属于GWT需要编译的客户端源码:
<!-- 原有inherits、entry-point等配置全部保留 --> <source path=""/>
- 编辑Main.gwt.xml,首先确认已经通过inherits引入Common模块:
<inherits name="你的根包名.Common"/>,再同样添加当前模块的源码路径声明:<source path=""/>。不需要重复配置src-common下的路径,模块继承时会自动加载依赖模块声明的源码路径。
注意:配置了source标签的路径下不要放服务端代码,GWT会尝试将路径下所有类编译为JS,服务端依赖的Java EE等API不在GWT JRE可模拟范围内,会触发编译报错。服务端代码可以单独放在src/main/src-server目录,不需要加入GWT的source配置。
3. 修正Super Dev Mode启动配置
打开Eclipse中已有的SDM启动配置,做两项检查:
- 切换到Classpath标签页,确认
src/main/src-client、src/main/src-common两个目录都在User Entries条目下,优先级高于GWT第三方依赖包 - 切换到Arguments标签页,检查Program Arguments中指定的启动模块名是Main模块的全限定名(比如com.example.Main),路径写错会导致GWT找不到模块配置
- 首次启动前先删除项目下
war/WEB-INF/deploy缓存目录、工作空间下的.gwt临时目录,避免旧缓存干扰。
配置完成后先执行一次mvn compile确认Maven编译无报错,再启动Super Dev Mode即可,该source路径报错会直接消失。
内容的提问来源于stack exchange,提问作者Abhishek Yadav

