我目前正在做一个小型 web 项目。因为项目比较简单,所以用不上 nginx ,而是把前端生成的文件直接放到 /src/main/resources/static
下。
开发模式用 IDE 运行项目时没有什么问题,但在打包后用java -jar
后会发现前端有一个 chunk 访问不到:
然而在生成的 jar 包中,这个chunk-6800bed8.432245a1.css
文件是有的,而且和其它 css 文件一样放在BOOT-INF/classes/static/css
目录下:
其它的 css 访问完全没有问题,但这个就不行。发现的唯一区别就是它的大小是 0B ,也就是空的,怀疑 Spring Boot 在生产模式下对空文件做一些处理。但不确定也不知道怎么解决,所以来问问,请大佬解答。
附加信息:
1 、Java:openjdk 11.0.12 。Spring Boot:2.5.3
2 、前后端分离,前台 vue2 全家桶。空的 chunk 文件确实不应该产生,但我认为即使产生了,Spring Boot 也应该帮我返回回去,最主要是打包后行为不一致。
3 、前台路由的配合方式是用 ErrorPages ,除了状态码不对外,效果上应该没问题。
通过 IDE 运行:
其它文件正常访问:
此文件也能正常访问(只不过是空的):
java -jar 运行:
其它文件仍能正常访问:
此文件无法正常访问(返回了 ErrorPage ):
找到问题所在了,ClassPathResource对File URL和jar URL采取不同的做法:
在jar中,空文件和目录会被认为是不可读的。而打包走了另一条路。
这个问题的背景是:https://github.com/spring-projects/spring-framework/issues/21372,有人访问了一个空文件夹,但下载了一个空文件。
跟我遇到相同问题的有:https://github.com/spring-projects/spring-boot/issues/16034,不过是在spring-boot里。
我的issue:https://github.com/spring-projects/spring-framework/issues/28107
1
cslive 2022-02-25 13:52:55 +08:00
有可能打包之后文件损坏
|
2
dcsuibian OP @cslive 重新打包过几次,maven 3.8.1 ,mvnw 也试过。应该不是损坏,最主要是 jar 包确实里有这个文件,
|