针对往spring boot打的jar或war包增加或修改lib中的jar包时报must be stored without compression的错误处理建议

        有的时候,你需要对spring boot的打的jar或war包里lib中的jar进行替换或增加时,直接使用Beyond Compare直接将对应的jar拉过去时,在运行时就会报It has been compressed and nested jar files must be stored without compression的错误,如果你是在源码工程的情况下,可以使用源码直接重新编译,如果没有,可以采用以下的方式进行处理,我们以myapp.war这个war为样例说明一下。

 

1、直接打成非压缩的jar包或war包

先将对应的jar或war包使用unzip解压出来,再用java的jar命令再打个非压缩的包,如:

unzip myapp.war -d myapp

cd myapp

jar -cvfM0 myapp.war ./*

 

其中myapp.war为你要操作的jar包

2、使用spring boot的spring-boot-maven-plugin插件重新打包

如果你本机有maven的环境,可以将你要操作的jar或war中的pom.xml文件给拿出来,因为我们只是要重新打包,并不用去下载工程里的jar包,所以可以将pom.xml里的都删除掉,只保留build,如:

 

org.springframework.boot

spring-boot-maven-plugin

true

src/main/java

**/*.properties

**/*.xml 

        src/main/resources

     

myapp

 

再在pom.xml当前目录下新建target目录,在target目录里再将新建你要打包的jar或war的相同名字的目录名,然后将jar或war中的所有文件解压到该目录下,将需要增加或修改的jar也覆盖到lib中,整个目录结构如下:

 

repackage

  pom.xml

  target

    myapp

      META-INF

      WEB-INF

      index.html

 

然后在windows操作系统下使用cmd命令进行操作,cd到repackage目录里,然后运行以下命令

mvn package

 

这样最后就会在target下生成对应的jar或war包了

 

总结:第1个方法就比较简单,但是没有压缩的包的jar或war包会比较大,第2个方法虽然比较麻烦,但是是比较完美的解决方案,他跟使用源码重新打包得出的效果是一样的,原理就是使用spring-boot-maven-plugin插件的repackage功能进行打包处理,以处理成符合spring boot的jar包处理方式。

你可能感兴趣的:(针对往spring boot打的jar或war包增加或修改lib中的jar包时报must be stored without compression的错误处理建议)