针对往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里的<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包处理方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值