Spring Boot打jar包时如何创建引用static目录的Wicket自定义CssResourceReference
核心原因
Wicket的CssResourceReference本质是从类路径加载和基准类绑定的资源,不是走Spring Boot的HTTP静态资源映射逻辑:
- 你传入的第一个参数
WicketApplication.class是资源查找的基准类,默认会在这个类的classpath同目录下查找第二个参数指定的文件 - 你之前放在
webapp或者resources/static下的资源,不符合Wicket ResourceReference的类路径查找规则,所以无法识别
解决方案
方案1:按Wicket默认规则存放(推荐)
- 资源存放路径:在
src/main/resources下创建和WicketApplication类包路径完全一致的目录,比如你的WicketApplication在com.example.demo包下,就创建src/main/resources/com/example/demo目录,把css、js文件放到这个目录里 - 代码调整:去掉
CssResourceReference第二个参数开头的斜杠,直接写文件名:
public static final CssResourceReference jqueryUiLayoutDefaultCss = new CssResourceReference(WicketApplication.class, "layout-default.min.css"); public static final CssResourceReference formDefaultCss = new CssResourceReference(WicketApplication.class, "default-form.min.css");
- 调用方式保持不变即可:
response.render(CssHeaderItem.forReference(formDefaultCss));
方案2:保留资源在static目录
如果你不想移动已经放在src/main/resources/static下的资源,只需要修改CssResourceReference的第二个参数,补全类路径下的完整路径即可:
public static final CssResourceReference formDefaultCss = new CssResourceReference(WicketApplication.class, "/static/default-form.min.css");
注意:Spring Boot对外暴露HTTP路径时自动去掉了
/static前缀,所以你可以直接通过localhost:8080/default-form.min.css访问,但Wicket读取类路径资源时需要写完整的类路径地址,所以必须加上/static前缀。
内容的提问来源于stack exchange,提问作者miroana
相关产品推荐
相关产品推荐

