You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot集成Jawr遇报错:无法找到指定资源包路径

Spring Boot集成Jawr时出现"No bundle found for path"错误的排查方案

我之前也碰到过类似的问题,结合Spring Boot和Jawr的集成经验,这几个方向应该能帮你定位问题:


1. Jawr配置文件的bundle映射未正确关联静态资源

Jawr的核心是通过配置文件定义bundle的源文件路径和输出ID,如果你只在static目录放了文件但没在配置里正确映射,Jawr根本不知道要生成对应的bundle。

检查你的jawr.properties(或yaml配置),确保每个bundle的sourceFiles指向static目录里的实际文件路径,比如:

# CSS bundle配置示例
jawr.css.bundles.dependency.id=/bundles/dependency.css
jawr.css.bundles.dependency.sourceFiles=classpath:/static/css/dependency.css

jawr.css.bundles.app.id=/bundles/app.css
jawr.css.bundles.app.sourceFiles=classpath:/static/css/app.css

# JS bundle配置示例
jawr.js.bundles.ie-support.id=/bundles/ie-support.js
jawr.js.bundles.ie-support.sourceFiles=classpath:/static/js/ie-support.js

# 开发环境开启自动构建(修改文件后自动重新生成bundle)
jawr.autobuild.on=true

注意:sourceFiles的路径要和你static目录下的文件结构完全匹配,比如如果文件在static/css/libs/dependency.css,那路径就要写成classpath:/static/css/libs/dependency.css。


2. Spring Boot的静态资源处理器拦截了Jawr的请求

Spring Boot默认会接管/路径下的静态资源请求,而Jawr需要通过自己的Servlet来处理/bundles/**的请求,否则Spring会直接去static目录找/bundles/dependency.css(这个文件当然不存在,因为bundle是Jawr生成的)。

解决方法是在Spring Boot配置类里注册Jawr的Servlet,让它专门处理bundle请求:

@Configuration
public class JawrConfiguration {

    @Bean
    public ServletRegistrationBean<JawrServlet> jawrCssServlet() {
        ServletRegistrationBean<JawrServlet> registration = new ServletRegistrationBean<>(new JawrServlet(), "/bundles/*.css");
        registration.addInitParameter("configLocation", "/jawr.properties");
        registration.setName("JawrCssServlet");
        return registration;
    }

    @Bean
    public ServletRegistrationBean<JawrServlet> jawrJsServlet() {
        ServletRegistrationBean<JawrServlet> registration = new ServletRegistrationBean<>(new JawrServlet(), "/bundles/*.js");
        registration.addInitParameter("configLocation", "/jawr.properties");
        registration.addInitParameter("type", "js");
        registration.setName("JawrJsServlet");
        return registration;
    }
}

3. Freemarker模板中未使用Jawr标签引用bundle

如果你在index.ftl里直接写了普通的link/script标签,比如:

<link href="/bundles/dependency.css" rel="stylesheet">

这种方式不会触发Jawr的bundle生成逻辑,自然找不到对应的文件。必须使用Jawr提供的Freemarker标签来引用:

# 先引入Jawr标签库
<#assign jawr=JspTaglibs["http://jawr.net/tags"] />

# 引用CSS bundle
<@jawr css="/bundles/dependency.css"/>
<@jawr css="/bundles/app.css"/>

# 引用JS bundle
<@jawr js="/bundles/ie-support.js"/>

4. Jawr未正确初始化或bundle生成开关未开启

检查项目启动日志,看看有没有Jawr初始化的相关日志,如果没有,说明Jawr没有被正确加载,可能是依赖引入不全或者配置文件路径不对。

另外,开发环境要确保jawr.autobuild.on=true,这样Jawr会在启动时自动扫描源文件生成bundle;生产环境可能需要提前预编译bundle,或者开启自动构建(不推荐生产环境开启)。


5. 路径大小写不匹配

如果你的部署环境是Linux/Mac,要注意文件路径是区分大小写的。比如配置里写的是dependency.css,但实际文件是Dependency.css,这种情况下Jawr找不到源文件,自然生成不了bundle。


内容的提问来源于stack exchange,提问作者Sahil Verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:56:10