项目resource下文件读取失败

在使用maven打包的时候,它会自动把resource下的字体文件移动到target文件夹下面,但是启动war的时候,每次都提示文件损坏,后来发现是maven在移动这个文件的时候,损坏了这个二进制文件。

原因是maven使用了maven-resource-plugin这个插件来拷贝资源文件,而这个插件有一个选项是<filtering>true<filtering/>,如果开启的话,只要是在classpath下的需要在打包时候用到的resource文件都被进行替换,也就是将会被映射成properties。但是这个操作只适用于文本文件,并不适用于二进制文件。

解决方案:

在build中添加<nonFileredFileExtensions>,将二进制文件指定不要映射

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.0.1</version>
        <configuration>
          <nonFilteredFileExtensions>
            <nonFilteredFileExtension>pdf</nonFilteredFileExtension>
            <nonFilteredFileExtension>key</nonFilteredFileExtension>
          </nonFilteredFileExtensions>
        </configuration>
      </plugin>
    </plugins>
  </build>

记录下文件路径问题

/D:/gitpro/项目名/target/TrafficAcquisition-1.0-RELEASE/WEB-INF/classes
Thread.currentThread().getContextClassLoader().getResource("/").getPath()

webapp地址:D:\gitpro\项目名\target\TrafficAcquisition-1.0-RELEASE\
ContextLoader.getCurrentWebApplicationContext().getServletContext().getRealPath("/")


版权声明:本文为chikai1原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。