针对往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的错误,如果你是在源码工程的情况下,可以使用源码直接
有的时候,你需要对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里的<dependencies>都删除掉,只保留build,如:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<finalName>myapp</finalName>
</build>
再在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包处理方式。
更多推荐
所有评论(0)