spring boot 构建的jar包可以直接执行确实很方便,但有时不想每次都把几乎不变的依赖jar打包进来,因此有了打包瘦身的方案,参考文章:https://blog.csdn.net/ssrc0604hx/article/details/54175027。
正常打包,提取lib目录,部署时将lib目录上传到服务器即可
打包时排除依赖jar
运行,线上运行时修正loader.path路径即可,wiki整理:https://wiki.xlongwei.com/doku.php?id=spring:boot
正常打包,提取lib目录,部署时将lib目录上传到服务器即可
# mvn clean package -Dmaven.test.skip=true # jar xvf target/app.jar BOOT-INF/lib/
打包时排除依赖jar
# mvn dependency:tree|grep +-|sed 's/.*+- / /g'|sed 's/:.*/,/g'|sort|uniq //依赖groupId # vi pom.xml <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <layout>ZIP</layout> <excludeGroupIds> aopalliance, ch.qos.logback //排除依赖groupId </excludeGroupIds> <excludeArtifactIds> okio, xpp3_min //排除依赖artifactId,个别输出有误:json-lib-2.4-jdk15.jar </excludeArtifactIds> </configuration> </plugin> # mvn clean package -Dmaven.test.skip=true //排除依赖groupId后再次打包 # jar tvf target/app.jar|grep -n '\.jar$'|sed 's/.*\/lib\///g'|sed 's/-[^-]*$/,/g' //输出依赖artifactId # vi pom.xml //排除依赖artifactId,然后再次打包 # mvn clean package -Dmaven.test.skip=true //可以再次检查依赖artifactId # ll target //可以看到jar和jar.original相差不大了,
运行,线上运行时修正loader.path路径即可,wiki整理:https://wiki.xlongwei.com/doku.php?id=spring:boot
java -Dloader.path="BOOT-INF/lib/" -jar target/app.jar