spirng boot 打包,胖fat包和瘦thin包
一、打胖包fat
打胖包采用的是spring的标准来执行,所以使用的是spring boot提供的打包插件
参考来源:打包Spring Boot应用 - 廖雪峰的官方网站
步骤
pom配置
...org.springframework.boot spring-boot-maven-plugin
打包命令
mvn clean package
target目录
$ ls
classes
generated-sources
maven-archiver
maven-status
springboot-exec-jar-1.0-SNAPSHOT.jar
springboot-exec-jar-1.0-SNAPSHOT.jar.original 其中,springboot-exec-jar-1.0-SNAPSHOT.jar.original是Maven标准打包插件打的jar包,它只包含我们自己的Class,不包含依赖,而springboot-exec-jar-1.0-SNAPSHOT.jar是Spring Boot打包插件创建的包含依赖的jar,可以直接运行:
执行
java -jar springboot-exec-jar-1.0-SNAPSHOT.jar
举例
org.springframework.boot spring-boot-maven-plugin ${spring-boot-dependencies.version} repackage
打包后的jar包解压后的文件目录

MANIFEST.MF文件
Manifest-Version: 1.0
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Archiver-Version: Plexus Archiver
Built-By: gymd
Start-Class: com.shenyun.flinkgui.Application
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Version: 2.3.4.RELEASE
Created-By: Apache Maven 3.6.1
Build-Jdk: 1.8.0_321
Main-Class: org.springframework.boot.loader.JarLauncher 总结
打包后只有一个可以执行的jar文件,内部包含了配置,lib等(lib)
打包后使用``java -jar demo.jar``启动项目
demo.jar中有MF信息清单,有入口类的说明Main-class
spring boot项目的类入口Main-class为org.springframework.boot.loader.JarLauncher,这个是标准的java处理
另外有个Start-Class表示是项目上的入口类型,这个由spring boot来处理
二、打瘦包thin(方式一)
使用plugin介绍
spring-boot-maven-plugin,得到主jar
maven-dependency-plugin,得到依赖包,lib/*.jar 文件
maven-assembly-plugin,组合主jar,lib/*.jar,config/,bin/* 文件 (如果不用assembly,也可以手动组装)
pom.xml打包插件的引入
org.springframework.boot spring-boot-maven-plugin ${spring-boot-dependencies.version} ZIP
org.apache.maven.plugins maven-dependency-plugin 3.3.0 prepare-package copy-dependencies target/lib
org.apache.maven.plugins maven-assembly-plugin 3.4.2 ${basedir}/assembly.xml ${project.artifactId} false ${project.build.directory}/release UTF-8 make-assembly package single assembly文件
assembly
dir false unix ${project.basedir}/src/main/resources ./config *.properties *.yml *.xml
unix ${project.basedir}/build/bin ./bin 0755 ${project.build.directory}/lib ./lib *.jar ${project.build.directory} ./ *.jar
打包后文件目录

主jar包的内部结构
内部结构

主jar包的MANIFEST.MF文件
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: shenyun
Created-By: Apache Maven 3.6.1
Build-Jdk: 1.8.0_321 1、内部结构是扁平的配置文件+编译class文件+META-INF文件
2、MANIFEST.MF不带有Main-class的指定,只有很简单的说明
说明:spring-boot-maven-plugin 原始的打包方式是可以直接将依赖包的classpath写入到MF文件中的,会一个一个的指定,但是打包后MF文件在jar中不可修改。如果是瘦包的方式,是为了灵活,可以修改classpath,建议MF中不指定classpath,而是由java的启动命令脚本来指定,这样更灵活。
启动命令
java -cp ".:\
/opt/flinkgui-web/lib/*:\
/opt/flinkgui-web/flinkgui-web-1.0-SNAPSHOT.jar" \
com.shenyun.flinkgui.Application 
启动命令解释
java -cp ".:${path_1}:${path_2}" ${mainClassFullName}
1、-cp是java的标准参数,为jar的搜索路径
2、jar的搜索路径必须写全路径,不能使用相对路径
3、jar的搜索路径,jdk1.6以上,可以使用通配符 "/xxx/lib/*",但是不能写成"/xxx/lib/*.jar"
4、jar搜索路径有几个就要写完,linux使用冒号分割“:”,windows使用分号“;”分割
5、jar搜索路径需要使用引号包裹,
6、建议jar搜索路径前将点号 “.”加到最前面,这个将作为程序运行的classpath,日志文件目录默认在该路径下
7、spring boot的项目需要读取外部配置文件,可以在config文件夹中修改,文件夹名字config是spring的标准,非java的
二、打瘦包thin(方式二)
使用plugin介绍
maven-jar-plugin,得到主jar ( 这点和方式一的区别 )
maven-dependency-plugin,得到依赖包,lib/*.jar 文件
maven-assembly-plugin,组合主jar,lib/*.jar,config/,bin/* 文件 (如果不用assembly,也可以手动组装)
org.apache.maven.plugins maven-jar-plugin 3.3.0 false false
org.apache.maven.plugins maven-dependency-plugin 3.3.0 prepare-package copy-dependencies target/lib
org.apache.maven.plugins maven-assembly-plugin 3.4.2 ${basedir}/assembly.xml ${project.artifactId} false ${project.build.directory}/release UTF-8 make-assembly package single
其余说明和瘦包的方式一类似。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
