spring boot项目直接替换引用jar包

有一个老的spring boot项目中使用到了shiro,最近shiro爆出安全漏洞了。所以要升级一下项目中的shiro版本。但是这个项目是由很久前的离职员工开发,源码已经无法找到了。所以尝试直接替换Jar 的形式升级shiro。

错误尝试

平时直接替换html,js可以直接打开winrar直接替换文件就行了,我本以为jar包也可以直接替换。发现jar直接替换运行会报错。

报错信息如下:

java -jar spring-zs-1.0-update.jar                                                          [18:02:05]
Exception in thread "main" java.lang.IllegalStateException: Unable to open nested entry 'BOOT-INF/lib/shiro-web-1.5.3.jar'. It has been compressed and nested jar files must be stored without compression. Please check the mechanism used to create your executable jar file
	at org.springframework.boot.loader.jar.JarFile.createJarFileFromFileEntry(JarFile.java:285)
	at org.springframework.boot.loader.jar.JarFile.createJarFileFromEntry(JarFile.java:260)
	at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:248)
	at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:237)
	at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:103)
	at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchives(JarFileArchive.java:87)
	at org.springframework.boot.loader.ExecutableArchiveLauncher.getClassPathArchives(ExecutableArchiveLauncher.java:72)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:49)
	at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)

正确步骤

通过jar命令解包

我的项目jar名称为spring-zs-1.0.jar

jar -xvf spring-zs-1.0.jar

解压完成后,替换./BOOT-INF/lib目录中的jar包,我把shiro--1.2.2.jar替换成了shiro--1.5.3.jar

重新打包

jar -cfM0 new.jar ./

这样就生成一个全新的jar包啦!

如果也是使用macOS系统的话,有一点要注意的。macOS系统会在一些目录中自动生成了
.DS_Store文件,所以你在重新打包前要删了这些隐藏的.DS_Store,不然运行会报错。

参考

https://blog.csdn.net/weixin_45417347/article/details/101539040

你可能感兴趣的:(java,spring,boot,升级jar)