Java 1.8 Gradle distZip打包后生产环境闪屏不显示如何解决
问题根因
生产环境闪屏不显示的核心问题是启动脚本里硬编码了开发机的本地绝对路径,且命令行参数优先级高于Jar包内配置:
- JVM启动时
-splash命令行参数的优先级高于Jar包MANIFEST中的配置,只要传了这个参数,JVM就只会去参数指定的文件系统路径找闪屏图,不会读取Jar包内的资源。 - 你当前生成的
myProj.bat里,DEFAULT_JVM_OPTS配置的-splash参数指向的是你开发环境的本地路径C:\dev\temp\myProj\app/src/main/resources/images/splash.png,生产环境部署的机器上根本没有这个目录,JVM找不到闪屏文件自然不会展示。 - 你已经在Jar包的MANIFEST.MF里正确配置了
SplashScreen-Image: images/splash.png,且Jar包内对应路径的图片确实存在,这套配置本身就可以让JVM自动从Jar包内加载闪屏,根本不需要额外传-splash启动参数。
修复步骤
直接调整Gradle构建配置,重新打包即可:
- 删除Gradle脚本里给
DEFAULT_JVM_OPTS添加-splash:本地路径的配置,不要在启动脚本里写死闪屏的本地文件地址。 - 确认Jar任务的MANIFEST配置正确,参考配置如下:
jar { manifest { attributes( 'Manifest-Version': '1.0', 'SplashScreen-Image': 'images/splash.png' ) } }
- 执行
./gradle clean distZip重新构建分发包。
验证方法:解压新生成的压缩包,先检查
myProj.bat里的DEFAULT_JVM_OPTS不再包含硬编码的-splash路径,再解压里面的Jar包,确认META-INF/MANIFEST.MF的闪屏配置正确、/images/splash.png文件存在即可。这套配置下不管部署到什么路径的机器上,JVM都会直接从Jar包内读取闪屏资源,不会再出现仅开发环境生效的问题。
内容的提问来源于stack exchange,提问作者Alexei
相关产品推荐
相关产品推荐

