JDK17环境下GWT 2.9.0编译成功但war模块目录无输出文件求助
问题原因及解决方案
核心原因
GWT 2.9.0版本发布时未适配JDK17的新特性,编译链路的日志输出与实际文件写入逻辑存在不一致的兼容性缺陷,具体可分为三类:
- JDK文件系统API兼容性问题:JDK9之后引入的模块系统修改了原有IO、NIO接口的调用权限,GWT2.9.0的Linker阶段调用的旧版文件写入方法在JDK17下路径解析错误,虽然日志提示链接成功,但文件实际被写入了JDK临时目录,而非配置的目标输出路径,你可以先检查日志中
Linking into对应的目录是否存在生成的资源文件,若存在则属于路径匹配问题。 - Maven插件配置不匹配:JDK17下路径编码解析逻辑发生变化,若gwt-maven-plugin配置的
<webappDirectory>输出路径与maven-war-plugin的资源扫描路径不一致,会导致GWT生成的文件不会被拷贝到最终war包中,使用全英文无空格的项目路径可以排除编码导致的路径解析错误。 - 系统权限拦截:JDK17默认收紧了文件写入权限,若项目存放于系统受保护目录(如C盘根目录、Program Files目录),写入操作会被操作系统拦截,实际无文件生成但无报错日志。
解决方案
- 优先升级
gwt-maven-plugin到2.10.0及以上版本,该版本官方已修复JDK11+的兼容性问题,完全支持JDK17编译且兼容Java 1.8源码版本,无需修改其他配置即可解决文件丢失问题。 - 若暂时无法升级GWT版本,可在Maven启动参数中添加权限开放参数:
--add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED
强制允许GWT调用旧版IO接口写入文件。 - 显式对齐GWT插件与war插件的路径配置,示例配置如下:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>gwt-maven-plugin</artifactId> <version>2.9.0</version> <configuration> <!-- 明确指定输出路径为war包构建目录 --> <webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory> </configuration> </plugin>
内容的提问来源于stack exchange,提问作者Juraj Homola
相关产品推荐
相关产品推荐

