- 问题
最近有项目要在jar包内使用jks证书文件,编译运行后,如下错误
java.io.IOException: Invalid keystore format
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:650)
at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:55)
at java.security.KeyStore.load(KeyStore.java:1214)
查看编译前后的证书文件大小,发现编译后的文件较大,所以猜测maven编译后对文件做了修改,导致了证书不可用。
- 解决
解决方案有两种
- 使用 maven-resources-plugin 进行过滤
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<!-- 过滤后缀为jks的证书文件 -->
<nonFilteredFileExtensions>
<nonFilteredFileExtension>jks</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
- 使用 resources 进行过滤
<resources>
<resource>
//将资源文件中的除了后缀为 jks 的其他文件打包到classpath下,对文件做处理
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>*.jks</exclude>
</excludes>
</resource>
<resource>
//将资源文件中后缀为 jks 的文件打包到classpath,但不对文件做处理
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>*.jks</include>
</includes>
</resource>
</resources>