一、网上搜到的下列替换方案都不行:
1、直接用WinRAR拖拽替换jar包内文件
失败,报错:压缩文件已损坏。
我以前替换成功过,但是启动的时候报错。这种方式可能会伤害到jar包的一些标识。
只适合zip格式的jar文件。可以先用这种方法试试,毕竟最简单。
2、解压jar包,然后使用jar命令(比如jar -uvf)重新打包
失败,能打包,但是以可执行文件(./xxx.jar start)运行时提示:jar: cannot execute binary file
最终我用下面方案成功了:
1、将jar包文件解压,并且把所有依赖的lib下的jar包统统解压,合并在一起( 包括class、配置文件和其他资源文件);
2、然后全部导入到maven项目的main/resource目录下,删除/META-INF/MANIFEST.MF;
3、然后配置maven pom.xml,如下所示:
<? xml version = "1.0" encoding = "UTF-8" ?> < project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" > < parent > < groupId >com.ctrip.framework.apollo</ groupId > < artifactId >apollo</ artifactId > < version >0.10.3-SNAPSHOT</ version > < relativePath >../pom.xml</ relativePath > </ parent > < modelVersion >4.0.0</ modelVersion > < artifactId >manual-package</ artifactId > < build > < plugins > < plugin > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-maven-plugin</ artifactId > < configuration > < mainClass >com.ctrip.framework.apollo.portal.PortalApplication</ mainClass > < executable >true</ executable > </ configuration > </ plugin > </ plugins > </ build > </ project > |
其原理就是将 jar包内的文件当做resource,重新打包到jar中即可。