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

这篇具有很好参考价值的文章主要介绍了解决Unexpected record signature 0X9&&maven 资源过滤。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

解决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目录,发现并没有替换成功。

解决Unexpected record signature 0X9&&maven 资源过滤,Java,maven,java,开发语言

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

解决Unexpected record signature 0X9&&maven 资源过滤,Java,maven,java,开发语言

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

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

解决Unexpected record signature 0X9&&maven 资源过滤,Java,maven,java,开发语言

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

解决Unexpected record signature 0X9&&maven 资源过滤,Java,maven,java,开发语言

思考?🤔

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

我的想法

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

所有idea并没有默认勾选这个设置。文章来源地址https://www.toymoban.com/news/detail-809806.html

到了这里,关于解决Unexpected record signature 0X9&&maven 资源过滤的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【安全】 Java 过滤器 解决存储型xss攻击问题

    【安全】 Java 过滤器 解决存储型xss攻击问题

    跨站脚本( cross site script )为了避免与样式css(Cascading Style Sheets层叠样式表)混淆,所以简称为XSS。 XSS是一种经常出现在web应用中的计算机安全漏洞 ,也是web中最主流的攻击方式。 XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些

    2024年02月08日
    浏览(8)
  • 资源过滤器—MVC中使用资源过滤器实现不执行Action方法体读取缓存信息返回

    资源过滤器—MVC中使用资源过滤器实现不执行Action方法体读取缓存信息返回

    上两篇文章分享了过滤器实现JWT进行鉴权,分别是通过授权过滤器和操作过滤器实现,这两个过滤器也是最常用的。文章链接:授权过滤器—MVC中使用授权过滤器实现JWT权限认证,操作过滤器—MVC中使用操作过滤器实现JWT权限认证,接下来将简单的谈谈资源过滤器在MVC中如何

    2024年02月13日
    浏览(39)
  • Java 21 新特性:Record Patterns

    Record Patterns 第一次发布预览是在JDK 19、随后又在JDK 20中进行了完善。现在,Java 21开始正式推出该特性优化。下面我们通过一个例子来理解这个新特性。 上述代码中定义了一个名为Point的record类(Java 16中的新特性),如果我们想要获取、操作或者打印Point中的x和y的话。就不得

    2024年02月08日
    浏览(7)
  • 一文解决JWT相同签名不匹配问题【JWT signature does not match locally computed signature.】

    一文解决JWT相同签名不匹配问题【JWT signature does not match locally computed signature.】

            今天做项目的时候,涉及到一个支付记账的功能,想着不能将这些金额数据显示暴露的通过常规的请求体封装来进行传输,想着要是被中途抓包修改了不就麻烦了,所以考虑到这种安全性的需求,就利用上了JWT来进行数据的封装传递,避免了被中途抓包修改的情况

    2024年02月13日
    浏览(10)
  • 使用Java 17中的record替代Lombok的部分功能

    在DD长期更新的Java新特性专栏中,已经介绍过Java 16中开始支持的新特性:record的使用。 之前只是做了介绍,但没有结合之前的编码习惯或规范来聊聊未来的应用变化。最近正好因为互相review一些合作伙伴的代码,产生了一些讨论话题,主要正针对于有了 record 之后,其实之前

    2024年02月02日
    浏览(7)
  • Java-Maven-解决maven deploy时报 401 Reason Phrase Unauthorized 错误

    Java JDK 1.8 Maven 3.3.9 项目需要打成jar包上传到私服,供其它项目引用。此时需要执行 mvn clean deploy 命令,执行过程中报 401 错误。 报错信息 执行命令:mvn clean deploy -DskipTests 关键错误信息 关键错误信息1: Failed to deploy artifacts 关键错误信息2: Could not transfer artifact com.*:*:po

    2024年02月11日
    浏览(9)
  • 【java】[maven]每次创建一个maven模块时java compiler版本就是1.6与实际版本不一致(解决本质问题)

    目录 方案一: 我没有使用 方案二:修改maven配置文件 前言:每次创建一个maven模块时java compiler版本就是1.6与实际版本不一致 使用的使用maven3.9.1 jdk17,但是每次创建一个maven模块都是会影响之前的模块。网上都是修改pom.xml 因为在项目中如果没有指定jdk的版本,重新运行的时

    2024年02月10日
    浏览(7)
  • java程序连接MinIO 报错The request signature we calculated does not match the signature you provided.

    java程序连接MinIO 报错The request signature we calculated does not match the signature you provided.

    自己搭建了一个 MinIO 对象存储服务,使用 Nginx 进行反代,但是使用 SpringBoot 对接的时候,上传文件总是报错。 报错内容: 解决方式按照官方ng的配置方式更改naginx的配置文件。 参考文档 setup-nginx-proxy-with-minio

    2024年02月12日
    浏览(9)
  • 从头学Java17-Stream API(二)结合Record、Optional

    Stream API 是按照map/filter/reduce方法处理内存中数据的最佳工具。 本系列教程由Record讲起,然后结合Optional,讨论collector的设计。 Java 语言为您提供了几种创建不可变类的方法。可能最直接的是创建一个包含final字段的final类。下面是此类的示例。 编写这些元素后,需要为字段添

    2024年02月12日
    浏览(8)
  • 解决java普通项目读取不到resouces目录下资源文件的办法

    解决java普通项目读取不到resouces目录下资源文件的办法

    现象如下:  可以看到resources目录已经在idea中标记成了资源目录resources root,而且target/classes目录下也编译出了resources目录下的pci.properties文件,换句话说:java在编译时是读取到了resources下的文件的。 可是为什么new File以后做路径判断时为什么返回false,找不到文件呢? 这里

    2024年02月09日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包