SpringMVC访问Maven子依赖jar下的静态资源

目录
  1. 需求
  2. 解决

需求

最近在设计编码存储(云存储、本地存储)管理系统,希望做到封装独立模块jar,jar内包含功能代码及前端打包后的代码。使用时创建另外的maven web项目依赖该jar,web项目可访问依赖jar内的静态资源html、js、css等。

解决

之前项目没有遇到过该场景,尝试检索“spring访问依赖jar静态资源”等各类关键字找不到简单明了的解决方案,后在spring官网文档通过搜索jar找到关键字webjars,又找到关键的一句“servlet3.0及以上版本可以读取jar包下/META-INF/resources资源”,最终测试成功。

结合实际业务简化如下:

1、maven多模块项目,使用了Spring Boot,模块A为功能模块,不需要可执行,模块A中有前端代码;模块B依赖模块A,作为可执行jar,运行后可通过访问localhost:8080打开网页。

2、在模块A的resources/static目录下放置前端编译好的代码结构如下。

依赖jar里前端代码的位置

3、模块A中配置resources插件,将resources代码打包至jar包的META-INF/resources中。

1
2
3
4
5
6
7
8
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>META-INF/resources</targetPath>
</resource>
</resources>
</build>

4、模块B依赖模块A,同时在application.yml中进行配置。

1
2
3
4
5
<dependency>
<groupId>com.test</groupId>
<artifactId>oss-test</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
1
2
3
spring:
resources:
static-locations: 'classpath:/META-INF/resources/static/'

5、启动模块B,页面访问成功。