当前位置: 代码迷 >> 综合 >> 如何解决Maven工程遇到的Invalid keystore format, URI: classpath://certs/xxxx.jks, type: JKS问题
  详细解决方案

如何解决Maven工程遇到的Invalid keystore format, URI: classpath://certs/xxxx.jks, type: JKS问题

热度:45   发布时间:2024-01-05 09:02:55.0

问题来源

最近新建立的Maven工程,其中用到了证书,刚开始编译启动都正常。 为了在构建项目生成docker镜像时能使用项目名称和版本构建时间等信息,在项目bootstrap.propertes文件添加了如下变量
info.build.artifactId=@project.artifactId@
info.build.version=@project.version@-@buildTime@

结果生成的target目录下bootstrap.properties文件确实完成了变量替换
#info
info.build.artifactId=myproject-service
info.build.version=2.6.0-20190412-225204

但是使用证书部分的代码却开始报错Invalid keystore format, URI: classpath://certs/xxxx.jks, type: JKS

问题分析

回想起来刚才一切都正确, 唯一的变动就是在bootstrap.properties中添加了变量然后修改了pom文件. 于是开始怀疑是否因为过滤替换导致了问题

        <resources><resource><!-- 指定打包时,需要特殊处理的文件 --><directory>src/main/resources</directory><!-- 处理文件时,需要对文件进行变量替换 --><filtering>true</filtering></resource></resources>

简单对比了src/main/resources/certs目录下的JKS证书和 target\classes\certs下的JKS证书文件,果然是这样的。
在这里插入图片描述

解决办法

我们在第二步中找到了问题原因,那就好解决了。
第一不使用过滤替换,这个办法简单粗暴。会导致我们没法使用bootstrap.properties中的变量。
第二种,就是细粒度地控制过滤替换功能,证书文件不进行过滤替换。

    <resources><resource><directory>src/main/resources</directory><includes><include>**/*</include></includes></resource><resource><directory>src/main/resources</directory><excludes><exclude>certs/*</exclude></excludes><filtering>true</filtering></resource></resources>

我们先指定定 src/main/resources下所有文件及文件夹为资源文件,然后在过滤时将src/main/resources/certs/*排除在外。

官方link

0, 关于资源 http://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html
如果我们的证书不在src/main/resources/certs/目录下面,我们可以添加

          <resource><directory>src/myresources</directory><includes><include>**/*</include></includes></resource>

1, 关于过滤 http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

  相关解决方案