当前位置: 首页 > news >正文

解决Unexpected record signature 0X9maven 资源过滤

解决Unexpected record signature: 0X9|maven 资源过滤

记录问题:我们有个需求是根据excel模版导出一个excel表。我们的项目是SpringBoot,所以理所当然的把这个模版文件放到了,resources文件夹中。但是在导出文件的时候却遇到了invalid code lengths setUnexpected record signature: 0X9的错误。

如何解决?

先说如何解决吧。两种方案任意一种即可解决该问题。

  • 方法一

pom.xml<build>中添加这一部分。

<build><resources><!--这段配置的作用是将 src/main/resources 目录下的所有文件复制到构建目录中,但排除了 .xlsx、.xls、.zip 和 .pdf 文件,并在复制过程中启用了资源过滤。--><resource><directory>src/main/resources</directory><!-- 表示将包含哪些文件 **/* 表示所有子目录及所有文件 --><includes><include>**/*</include></includes><!-- 表示将排除哪些文件  --><excludes><exclude>**/*.xlsx</exclude><exclude>**/*.xls</exclude><exclude>**/*.zip</exclude><exclude>**/*.pdf</exclude></excludes><!-- 开启资源过滤 --><filtering>true</filtering></resource><!--这段配置的作用是将 src/main/resources 目录下的 .xlsx、.xls、.zip 和 .pdf 文件,复制到构建目录中并在复制过程中关闭资源过滤。--><resource><directory>src/main/resources</directory><includes><include>**/*.xlsx</include><include>**/*.xls</include><include>**/*.zip</include><include>**/*.pdf</include></includes><!-- 关闭资源过滤 --><filtering>false</filtering></resource></resources>
</build>
  • 方式二

使用maven-resources-plugin插件来帮我们在进行资源过滤时,不要对指定扩展名的文件进行过滤。

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.1.0</version><configuration><!--排除的不需要资源过滤的文件后缀名列表--><nonFilteredFileExtensions><nonFilteredFileExtension>xlsx</nonFilteredFileExtension><nonFilteredFileExtension>xls</nonFilteredFileExtension><nonFilteredFileExtension>zip</nonFilteredFileExtension><nonFilteredFileExtension>pdf</nonFilteredFileExtension></nonFilteredFileExtensions></configuration>
</plugin>

资源过滤

资源过滤,他是要干什么?

占位符替换maven在对构建项目的时候如何遇到文件中有${env}这种格式的内容的时候,他就会在环境变量中或者项目变量中去寻找对应的值来进行替换。

举例:像db这种配置通常为了安全,我们并不会直接将明文直接写在配置文件中,通常我们都是通过环境变量的方式来进行替换(虽然实际使用上并不是在打包环节进行替换,但是使用这种方式也可以达到目的)。

结论

为什么会出现文件损坏等这种问题呢?

maven,项目在构建并且我们开启了资源过滤的时候,maven会去扫描所有资源文件中的内容,并且遇到占位符后会对其进行替换(这里其实还会对文件进行压缩等安全性的操作)。所以可能会对我们的一些资源文件造成损坏的问题,从而导致报错。

通过在pom.xml中对资源文件进行一部分的排除过滤后,使得原文件可以跳过资源过滤从而保证文件的完整性。

补充

遇到一个奇怪的问题🤔。

我在Idea里面直接启动我的SpringBoot的时候,想使用这个资源过滤来对一个文件进行占位符替换的时候,发现他不生效。

我在pom.xml中添加了一个self.admin的变量,想要通过这个变量来对文件中的一个占位符来进行替换。

pom.xml

 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><resource.delimiter>${}</resource.delimiter><self.admin>111</self.admin>
</properties>

原文件

${self.admin}${pom.name}

直接启动SpringBoot项目后生成的target目录,发现并没有替换成功。

image-20240113190812321

但是我使用mvn package进行打包的时候,却发现可以正常替换成功。

image-20240113232531299

这是为什么呢?我感觉这里其实也走了一部分maven的编译。因为我们在修改pom.xml的一些plugin配置的时候,他也会生效。这里我是个🤔。

有解决方案,那就是强制让idea使用maven在对项目进行编译与运行。在setting中找到该选项Delegate build and run actions to Maven并勾选他。

image-20240113232531299

再次运行SpringBoot项目,发现他成功替换了。

image-20240113232531299

思考?🤔

为什么idea识别到是maven项目后不强制使用maven来构建项目呢?

我的想法

  • 通常我们有一些插件并不需要在编译是使用,像有一些jib-maven-plugin构建docker镜像。
  • 使用maevn编译可以会慢一些。

所有idea并没有默认勾选这个设置。

相关文章:

  • jar包部署到linux虚拟机的docker中之后连不上mysql
  • 【Spring实战】28 @Autowired 和 @Resource注解的区别与使用
  • Linux完全卸载Anaconda3和MiniConda3
  • 索引的概述和使用
  • 线性代数——(期末突击)概率统计习题(概率的性质、全概率公式)
  • YOLOv5改进 | 注意力篇 | CGAttention实现级联群体注意力机制 (全网首发改进)
  • 智能路由器 端口映射 (UPnP) Padavan内网端口映射配置方法
  • 山西电力市场日前价格预测【2024-01-13】
  • openssl3.2 - 官方demo学习 - cms - cms_sign.c
  • Python数据的验证
  • 嵌入式培训机构四个月实训课程笔记(完整版)-Linux网络编程第一天-socket编程练习(物联技术666)
  • DCP文件传输的重要性与应用
  • GNU Tools使用笔记
  • 初识 Elasticsearch 应用知识,一文读懂 Elasticsearch 知识文集(1)
  • [足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-8 状态观测器设计 Linear Observer Design
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 30秒的PHP代码片段(1)数组 - Array
  • Java多线程(4):使用线程池执行定时任务
  • JAVA多线程机制解析-volatilesynchronized
  • Mybatis初体验
  • python学习笔记-类对象的信息
  • Spring-boot 启动时碰到的错误
  • 简单基于spring的redis配置(单机和集群模式)
  • 区块链将重新定义世界
  • 日剧·日综资源集合(建议收藏)
  • 如何解决微信端直接跳WAP端
  • 详解移动APP与web APP的区别
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #NOIP 2014# day.2 T2 寻找道路
  • #微信小程序(布局、渲染层基础知识)
  • (02)vite环境变量配置
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (阿里云万网)-域名注册购买实名流程
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (十八)三元表达式和列表解析
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (小白学Java)Java简介和基本配置
  • (一)appium-desktop定位元素原理
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript
  • .net core控制台应用程序初识
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET6实现破解Modbus poll点表配置文件
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • .考试倒计时43天!来提分啦!
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!