【发布时间】:2014-07-07 04:17:51
【问题描述】:
好吧,我有一个可以在本地计算机上运行的 spring-boot 应用程序。但是我注意到,当我执行 mvn package 时,我的 css 或 java 脚本都没有位于
/src/main/wepapp/css
正在被复制到目标目录中创建的 jar 文件(包)中。
spring boot 参考指南说
65.3 将现有应用程序转换为 Spring Boot “静态资源可以移动到 /public(或 /static 或 /resources 或 /META-INF/resources) 在类路径根目录中。”
24.1.4 静态内容“如果您的应用程序将被打包为 jar,请不要使用 src/main/webapp 文件夹。虽然此文件夹是 通用标准,它只适用于战争包装,它将是 如果您生成 jar,大多数构建工具都会默默地忽略它。”
这意味着我可以将我所有的 js 和 css 文件夹放入文件夹中
/src/main/resources/static
即现在我的结构是这样的
/src/main/resources/static/css/
/src/main/resources/static/js/
我所有的百里香模板仍然位于
/src/main/resources/templates/
我做到了,据我所知,我需要将 ResourceHandler 添加到我的 ResourceHandlerRegistry。以前,当我所有的 ccs 都在“/src/main/wepapp/css/”中时,我的 ResourceHandlers 看起来像这样,它对我来说效果很好。
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/pdfs/**").addResourceLocations("/pdfs/").setCachePeriod(0);
registry.addResourceHandler("/img/**").addResourceLocations("/img/").setCachePeriod(0);
registry.addResourceHandler("/js/**").addResourceLocations("/js/").setCachePeriod(0);
registry.addResourceHandler("/css/**").addResourceLocations("/css/").setCachePeriod(0);
}
我尝试添加多个处理程序,例如
registry.addResourceHandler("/css/**").addResourceLocations("/css/").setCachePeriod(0);
或
registry.addResourceHandler("/css/**").addResourceLocations("/static/css/").setCachePeriod(0);
或
registry.addResourceHandler("/css/**").addResourceLocations("/").setCachePeriod(0);
等等。
但没有一个对我有用。 显示 html 模板,但 Web 浏览器控制台在尝试定位 /css/corresponing.css 或 /js/corresponing.js 时报告 404
为了简化这个问题的调试,我特意在我的测试项目中禁用了 Spring 安全性。
我不完全理解的另一件事是部署程序集。我读过一篇文章说,当我确实希望将特定文件夹放入由 maven 生成的目标包 jar 文件中时,我确实需要将这些文件夹包含到我的部署程序集中,但是我确实做到了,但是“mvn 包”仍然没有解决我的 /src/main/static 文件夹的所有内容(包括子文件夹)到目标 jar 文件中。但是,我看到将“模板”文件夹复制到 jar 文件中。所以在幕后还有一些其他的魔法发生。
这是我如何在百里香布局中声明 css,即
/src/main/resources/templates/layout.html
<!DOCTYPE html>
<html>
<head>
<title layout:title-pattern="$DECORATOR_TITLE - $CONTENT_TITLE">Task List</title>
<link rel="stylesheet" type="text/css" media="all" th:href="@{/css/syncServer.css}" href="../css/syncServer.css" />
...
</head>
<body>
...
</body>
</html>
我的问题是:到目前为止我所做的配置是否正确,如果正确,我需要注意哪些其他选项/设置才能使应用程序找到位于 /src/main/static/css/ 中的 css 文件
加一个
测试项目
git@github.com:TheDictator/sArchitecture.git
【问题讨论】:
-
使用 Spring Boot 时,如果将资源添加到
/src/main/resources/static,则需要任何addResourceHandlers配置。如果您当然使用过@EnableAutoConfiguration并且没有使用过@EnableWebMvc,那么 Spring Boot 将自行处理这些内容 -
你好 geoand,我在一个配置类下使用了@EnableWebMvc,现在我已经删除了它,但仍然没有加载 css。我什至评论了 addResourceHandlers bean,以检查它们是否会自动注册。你能发布一个关于我们不应该使用 EnableWebMvc 的链接
-
如果你看一下
WebMvcAutoConfiguration的源代码,你会看到@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)。这意味着WebMvcAutoConfiguration仅在WebMvcConfigurationSupport未配置为 bean 时使用,这反过来意味着不存在@EnableWebMvc时 -
如果仍有问题,能否发布您的 Spring 配置?我已经按照我在第一条评论中提到的方式使用了资源,完全没有问题
-
你好 geoand 这仍然不是我所期望的。我将在几个小时内将项目砍掉并在 github 上发布该项目,然后我将在此处发布链接。感谢您的支持。
标签: css spring maven spring-boot