maven 仅在Sping Boot 应用程序中出现StreamCorruptedException

9w11ddsr  于 2022-11-02  发布在  Maven
关注(0)|答案(1)|浏览(153)

在一个Sping Boot 应用程序(2.3.3)中,我对我公司开发的一个模块有一个依赖关系。从一个服务中,我从这个依赖关系中调用一个方法,它需要一个从资源中加载的文件(src/main/resources/META-INF/spring-main-cfg.xml),所以我已经将这个文件复制并粘贴到我的Spring Boot应用程序资源中。
下面是在该依赖项中执行的代码:

InputStream in = RSAEncrypter.class.getClassLoader().getResourceAsStream(keyFileName);
// StreamCorruptedException here
ObjectInputStream oin = new ObjectInputStream(new BufferedInputStream(in));

堆栈:
异常错误:无效的数据流标头:在java.io中的对象输入流。读取流标题(对象输入流。java:936)~[na:1. 8. 0_281]在java. io中的对象输入流。(对象输入流。java:394)~[na:1. 8. 0_281]
问题是,我已经创建了一个新的虚拟Maven项目,它只有这个依赖项和一个main来执行代码,并且它工作了。
我不明白是什么原因导致我的Sping Boot 应用程序执行了这个异常。我有相同的Java版本,读取的文件也是相同的。
有什么想法吗?

nhaq1z21

nhaq1z211#

我终于找到了问题所在,这是文件本身,因为我有一个全局:

<resources>
  <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
  </resource>
</resources>

Maven文档对此表示:
警告:不要筛选包含二进制内容(如图像)的文件!这很可能会导致输出损坏。
https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
因此,我只是为我的文件添加了一个例外:

<resources>
  <!-- Only properties files have to be filtered.
       META-INF/spring-main-cfg.xml must not be or StreamCorruptedException occure by reading it -->
  <resource>
    <directory>src/main/resources</directory>
    <filtering>false</filtering>
  </resource>
  <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
    <includes>
      <include>**/*.properties</include>
    </includes>
  </resource>
</resources>

相关问题