Wicket Bootstrap应用执行Uber Jar启动时报webjars资源不存在异常如何解决
问题根因
该错误是因为Wicket Webjars默认加载的WebSphereClasspathAssetPathCollector资源收集器是为WebSphere应用服务器设计的,完全不支持Spring Boot Fat Jar的嵌套Jar路径格式(BOOT-INF/lib/xxx.jar!/xxx),且你添加的Spring MVC资源处理器完全不生效——Wicket自有独立的资源处理逻辑,不会走Spring MVC的资源映射链。
解决方案
按以下步骤逐一配置即可解决:
- 替换Wicket Webjars的资源收集器
在你的Wicket应用初始化类(继承WebApplication的类)的init方法中,安装Bootstrap之前显式指定使用支持嵌套Jar的收集器,禁用默认的WebSphere收集器:
@Override protected void init() { super.init(); // 显式指定使用Jar文件资源收集器,适配Spring Boot嵌套Fat Jar WicketWebjars.install(this, new JarFileAssetPathCollector()); // 再安装Wicket Bootstrap Bootstrap.install(this); // 其他原有初始化逻辑 }
- 升级Wicket Webjars版本(可选,适用于低版本场景)
如果你的wicket-webjars依赖版本低于2.0.10,建议升级到最新稳定版,该版本之后原生支持Spring Boot Fat Jar的路径解析。 - 检查Gradle bootJar配置
确保你的build.gradle中bootJar任务没有排除META-INF/resources路径下的资源,不要出现类似以下配置:
// 错误配置,会过滤掉webjars资源,需要删除 bootJar { exclude 'META-INF/resources/**' }
- 删除无用的Spring MVC资源处理器配置
你之前添加的WebConfig类的资源映射配置对Wicket完全无效,可以直接删除。
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

