经常会遇到项目源代码和发布环境不在一起的情况,这时候就需要拷贝打包以后的文件到客户现场进行安装,Spring Boot提供了spring-boot-maven-plugin
这个插件,在执行mvn package
以后,会打包一个fat jar
,也就是我们说的all in one
的方式,这种方式会将所有的依赖jar和自己写的代码打包成一个jar文件,启动时只需要执行java -jar file.jar
就能启动。
但是偶尔存在一些bug修复,需要重新打包发布,其实改动的东西就只是我们自己写的代码,再打一个fat jar
发给售后的朋友进行更新,一个Spring Boot程序,至少都要20MB起步,他们在外面使用流量下载时,心里肯定是一万只草泥马奔腾。下我们可以使用maven的maven-jar-plugin
和maven-dependency-plugin
对lib依赖进行分离打包,最后再结合maven-assembly-plugin
自动打包一个zip
或者tar.gz
格式的压缩包,这样体积就能小很多。
正常情况打包的target目录结构
文件大小
➜ target git:(master) ✗ ll total 108048 drwxr-xr-x 9 tao.zeng staff 288B 7 11 18:41 classes drwxr-xr-x 4 tao.zeng staff 128B 7 11 18:41 generated-sources drwxr-xr-x 3 tao.zeng staff 96B 7 11 18:41 generated-test-sources drwxr-xr-x 3 tao.zeng staff 96B 7 11 18:41 maven-archiver drwxr-xr-x 3 tao.zeng staff 96B 7 11 18:41 maven-status -rw-r--r-- 1 tao.zeng staff 53M 7 11 18:41 supervisord4j-1.0.0.jar # 这是fat jar,可以看到53MB -rw-r--r-- 1 tao.zeng staff 28K 7 11 18:41 supervisord4j-1.0.0.jar.original # 这是没有lib依赖的原始jar drwxr-xr-x 3 tao.zeng staff 96B 7 11 18:41 test-classes
目录说明
➜ target git:(master) ✗ tree -L 2 . ├── classes # 编译以后的class文件 │ ├── application-mysql.yml │ ├── application-sqlite.yml │ ├── application.yml # 配置信息 │ ├── com # 源代码class在这里 │ ├── db │ ├── git.properties # git信息 │ └── logback-spring.xml # 日志配置文件 ├── generated-sources │ ├── annotations │ └── java-templates ├── generated-test-sources │ └── test-annotations ├── maven-archiver │ └── pom.properties ├── maven-status │ └── maven-compiler-plugin ├── supervisord4j-1.0.0.jar # 这是fat jar ├── supervisord4j-1.0.0.jar.original # 这是没有lib依赖的原始jar └── test-classes └── com # 测试文件 13 directories, 8 files
修改fat jar输出目录
修改spring-boot-maven-plugin
插件配置,让fat jar
挪个位置,并且重命名一下
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 文件名追加一个bootJar -->
<classifier>bootJar</classifier>
<!-- 文件输出路径,修改为target的boot目录下 -->
<outputDirectory>${project.build.directory}/boot</outputDirectory>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
再次打包查看目录结构,可以看到boot目录下面有个一个supervisord4j-1.0.0-bootJar.jar
文件,并且没有了原先的.origin
的文件
➜ target git:(master) ✗ ll
total 64
drwxr-xr-x 3 tao.zeng staff 96B 7 11 18:47 boot
drwxr-xr-x 9 tao.zeng staff 288B 7 11 18:47 classes
drwxr-xr-x 4 tao.zeng staff 128B 7 11 18:47 generated-sources
drwxr-xr-x 3 tao.zeng staff 96B 7 11 18:47 generated-test-sources
drwxr-xr-x 3 tao.zeng staff 96B 7 11 18:47 maven-archiver
drwxr-xr-x 3 tao.zeng staff 96B 7 11 18:47 maven-status
-rw-r--r-- 1 tao.zeng staff 28K 7 11 18:47 supervisord4j-1.0.0.jar
drwxr-xr-x 3 tao.zeng staff 96B 7 11 18:47 test-classes
➜ target git:(master) ✗ ll boot
total 107984
-rw-r--r-- 1 tao.zeng staff 53M 7 11 18:47 supervisord4j-1.0.0-bootJar.jar
分离fat jar的lib依赖
使用maven-jar-plugin
设置jar的classpath
值,使用maven-dependency-plugin
复制lib依赖到lib目录下面
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.iogogogo.supervisord4j.Supervisord4jApplication</mainClass>
<useUniqueVersions>false</useUniqueVersions>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
重新执行打包命令,target目录的文件如下,可以看到多了lib目录
➜ supervisord4j git:(master) ✗ cd target
➜ target git:(master) ✗ ll
total 64
drwxr-xr-x 3 tao.zeng staff 96B 7 11 18:56 boot
drwxr-xr-x 9 tao.zeng staff 288B 7 11 18:56 classes
drwxr-xr-x 4 tao.zeng staff 128B 7 11 18:56 generated-sources
drwxr-xr-x 3 tao.zeng staff 96B 7 11 18:56 generated-test-sources
drwxr-xr-x 126 tao.zeng staff 3.9K 7 11 18:56 lib
drwxr-xr-x 3 tao.zeng staff 96B 7 11 18:56 maven-archiver
drwxr-xr-x 3 tao.zeng staff 96B 7 11 18:56 maven-status
-rw-r--r-- 1 tao.zeng staff 29K 7 11 18:56 supervisord4j-1.0.0.jar
drwxr-xr-x 3 tao.zeng staff 96B 7 11 18:56 test-classes
使用maven-jar-plugin插件的作用
没有maven-jar-plugin插件配置时,jar内部的META-INF/MANIFEST.MF
文件内容如下:
➜ target git:(master) ✗ vim supervisord4j-1.0.0.jar
➜ target git:(master) ✗ clear
Manifest-Version: 1.0
Implementation-Title: supervisord4j
Implementation-Version: 1.0.0
Build-Jdk-Spec: 1.8
Created-By: Maven Jar Plugin 3.2.0
配置maven-jar-plugin
以后,jar内部的META-INF/MANIFEST.MF
文件内容如下:
➜ target git:(master) ✗ vim supervisord4j-1.0.0.jar
➜ target git:(master) ✗ clear
cat-embed-websocket-9.0.46.jar lib/spring-web-5.3.8.jar lib/spring-be
ans-5.3.8.jar lib/spring-webmvc-5.3.8.jar lib/spring-aop-5.3.8.jar li
b/spring-context-5.3.8.jar lib/spring-expression-5.3.8.jar lib/superv
isord-spring-boot-starter-1.0.0.jar lib/supervisord-spring-boot-autoc
onfigure-1.0.0.jar lib/okhttp-3.14.9.jar lib/okio-1.17.2.jar lib/jool
-java-8-0.9.14.jar lib/guava-30.1.1-jre.jar lib/failureaccess-1.0.1.j
ar lib/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
lib/jsr305-3.0.2.jar lib/checker-qual-3.8.0.jar lib/error_prone_anno
tations-2.5.1.jar lib/j2objc-annotations-1.3.jar lib/commons-lang3-3.
12.0.jar lib/spring-boot-starter-data-jpa-2.5.1.jar lib/spring-boot-s
tarter-aop-2.5.1.jar lib/aspectjweaver-1.9.6.jar lib/spring-boot-star
ter-jdbc-2.5.1.jar lib/HikariCP-4.0.3.jar lib/spring-jdbc-5.3.8.jar l
ib/jakarta.transaction-api-1.3.3.jar lib/jakarta.persistence-api-2.2.
3.jar lib/hibernate-core-5.4.32.Final.jar lib/jboss-logging-3.4.2.Fin
al.jar lib/javassist-3.27.0-GA.jar lib/byte-buddy-1.10.22.jar lib/ant
lr-2.7.7.jar lib/jandex-2.2.3.Final.jar lib/dom4j-2.1.3.jar lib/hiber
nate-commons-annotations-5.1.2.Final.jar lib/jaxb-runtime-2.3.4.jar l
ib/txw2-2.3.4.jar lib/istack-commons-runtime-3.0.12.jar lib/jakarta.a
ctivation-1.2.2.jar lib/spring-data-jpa-2.5.1.jar lib/spring-data-com
mons-2.5.1.jar lib/spring-orm-5.3.8.jar lib/spring-tx-5.3.8.jar lib/s
pring-aspects-5.3.8.jar lib/flyway-core-7.7.3.jar lib/springfox-boot-
starter-3.0.0.jar lib/springfox-oas-3.0.0.jar lib/swagger-annotations
-2.1.2.jar lib/swagger-models-2.1.2.jar lib/springfox-spi-3.0.0.jar l
ib/springfox-schema-3.0.0.jar lib/springfox-core-3.0.0.jar lib/spring
fox-spring-web-3.0.0.jar lib/classgraph-4.8.83.jar lib/springfox-spri
ng-webmvc-3.0.0.jar lib/springfox-spring-webflux-3.0.0.jar lib/spring
fox-swagger-common-3.0.0.jar lib/mapstruct-1.3.1.Final.jar lib/spring
fox-data-rest-3.0.0.jar lib/springfox-bean-validators-3.0.0.jar lib/s
pringfox-swagger2-3.0.0.jar lib/swagger-annotations-1.5.20.jar lib/sw
agger-models-1.5.20.jar lib/springfox-swagger-ui-3.0.0.jar lib/classm
ate-1.5.1.jar lib/slf4j-api-1.7.30.jar lib/spring-plugin-core-2.0.0.R
ELEASE.jar lib/spring-plugin-metadata-2.0.0.RELEASE.jar lib/mysql-con
nector-java-8.0.25.jar lib/sqlite-jdbc-3.28.0.jar lib/sqlite-dialect-
0.1.2.jar lib/lombok-1.18.20.jar lib/jakarta.xml.bind-api-2.3.3.jar l
ib/jakarta.activation-api-1.2.2.jar lib/spring-core-5.3.8.jar lib/spr
ing-jcl-5.3.8.jar
Build-Jdk-Spec: 1.8
Created-By: Maven Jar Plugin 3.2.0
Main-Class: com.iogogogo.supervisord4j.Supervisord4jApplication
zipfile:/Users/tao.zeng/share/workspaces/supervisord-spring-boot/ext/supervisord4j/target/supervisord4j-1.0.0.jar::META-INF/MANIFEST.MF
META-INF/MANIFEST.MF
supervisord4j-1.0.0.jar [RO]
maven-jar-plugin
的核心作用就是为jar添加classpath和Main-Class配置,否则执行java -jar时会报错提示找不到主类。
使用assembly插件进行归档
在之前的文章maven归档插件assembly介绍中介绍过maven-assembly
插件的用法,这里只贴一下配置文件,详情看那篇文章介绍。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<!-- 在package任务以后执行 -->
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<!-- 生产压缩包名称 -->
<finalName>${project.artifactId}-${project.version}-${timestamp}</finalName>
<!-- 追加id 按照assembly文件打出不同的归档包文件-->
<appendAssemblyId>true</appendAssemblyId>
<!-- assembly配置文件 -->
<descriptors>
<!-- assembly-{id},这里后面的release、incr、bootJar分别对应assembly文件中的id,这里同时使用了三个assembly配置文件 -->
<descriptor>src/assembly/assembly-release.xml</descriptor>
<descriptor>src/assembly/assembly-incr.xml</descriptor>
<descriptor>src/assembly/assembly-bootJar.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
assembly文件配置
release
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2
http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>release</id>
<formats>
<format>tar.gz</format>
<format>zip</format>
<format>dir</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>src/assembly/bin</directory>
<outputDirectory>supervisord4j/bin</outputDirectory>
<fileMode>755</fileMode>
<includes>
<include>*</include>
</includes>
</fileSet>
<fileSet>
<directory>target</directory>
<outputDirectory>supervisord4j</outputDirectory>
<includes>
<include>supervisord4j-*.jar</include>
<include>lib/*.jar</include>
</includes>
</fileSet>
<fileSet>
<directory>src/main/resources</directory>
<outputDirectory>supervisord4j</outputDirectory>
<includes>
<include>logback-spring.xml</include>
<include>application*.yml</include>
</includes>
</fileSet>
</fileSets>
</assembly>
incr
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2
http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>incr</id>
<formats>
<format>tar.gz</format>
<format>zip</format>
<format>dir</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>target</directory>
<outputDirectory>supervisord4j</outputDirectory>
<includes>
<include>supervisord4j-*.jar</include>
<include>lib/supervisord-*</include>
</includes>
</fileSet>
<fileSet>
<directory>src/main/resources</directory>
<outputDirectory>supervisord4j</outputDirectory>
<includes>
<include>logback-spring.xml</include>
<include>application*.yml</include>
</includes>
</fileSet>
</fileSets>
</assembly>
bootJar
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2
http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>bootJar</id>
<formats>
<format>tar.gz</format>
<format>zip</format>
<format>dir</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>src/assembly/bin</directory>
<outputDirectory>supervisord4j/bin</outputDirectory>
<fileMode>755</fileMode>
<includes>
<include>*</include>
</includes>
</fileSet>
<fileSet>
<directory>target/boot</directory>
<outputDirectory>supervisord4j</outputDirectory>
<includes>
<include>supervisord4j-*.jar</include>
</includes>
</fileSet>
<fileSet>
<directory>src/main/resources</directory>
<outputDirectory>supervisord4j</outputDirectory>
<includes>
<include>logback-spring.xml</include>
<include>application*.yml</include>
</includes>
</fileSet>
</fileSets>
</assembly>
完整的pom文件
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.iogogogo.supervisord4j</groupId>
<artifactId>supervisord4j</artifactId>
<version>1.0.0</version>
<name>supervisord4j</name>
<description>supervisord4j project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.iogogogo.supervisord</groupId>
<artifactId>supervisord-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.jooq</groupId>
<artifactId>jool-java-8</artifactId>
<version>0.9.14</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1.1-jre</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.28.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.github.gwenn</groupId>
<artifactId>sqlite-dialect</artifactId>
<version>0.1.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 文件名追加一个bootJar -->
<classifier>bootJar</classifier>
<!-- 文件输出路径,修改为target的boot目录下 -->
<outputDirectory>${project.build.directory}/boot</outputDirectory>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>revision</goal>
</goals>
</execution>
</executions>
<configuration>
<dateFormat>yyyy.MM.dd HH:mm:ss</dateFormat>
<dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
<verbose>true</verbose>
<generateGitPropertiesFilename>
${project.basedir}/src/main/resources/git.properties
</generateGitPropertiesFilename>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>templating-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<id>filter-src</id>
<goals>
<goal>filter-sources</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.3</version>
<configuration>
<timestampFormat>yyyyMMdd-HHmmss</timestampFormat>
</configuration>
<executions>
<execution>
<goals>
<goal>create-timestamp</goal>
</goals>
</execution>
</executions>
<inherited>false</inherited>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.iogogogo.supervisord4j.Supervisord4jApplication</mainClass>
<useUniqueVersions>false</useUniqueVersions>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<!-- 在package任务以后执行 -->
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<!-- 生产压缩包名称 -->
<finalName>${project.artifactId}-${project.version}-${timestamp}</finalName>
<!-- 追加id 按照assembly文件打出不同的归档包文件-->
<appendAssemblyId>true</appendAssemblyId>
<!-- assembly配置文件 -->
<descriptors>
<descriptor>src/assembly/assembly-release.xml</descriptor>
<descriptor>src/assembly/assembly-incr.xml</descriptor>
<descriptor>src/assembly/assembly-bootJar.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
打包以后的target目录
➜ target git:(master) ✗ ll
total 435232
drwxr-xr-x 2 tao.zeng staff 64B 7 11 19:10 archive-tmp
drwxr-xr-x 3 tao.zeng staff 96B 7 11 19:10 boot
drwxr-xr-x 9 tao.zeng staff 288B 7 11 19:10 classes
drwxr-xr-x 4 tao.zeng staff 128B 7 11 19:10 generated-sources
drwxr-xr-x 3 tao.zeng staff 96B 7 11 19:10 generated-test-sources
drwxr-xr-x 126 tao.zeng staff 3.9K 7 11 19:10 lib
drwxr-xr-x 3 tao.zeng staff 96B 7 11 19:10 maven-archiver
drwxr-xr-x 3 tao.zeng staff 96B 7 11 19:10 maven-status
drwxr-xr-x 3 tao.zeng staff 96B 7 11 19:10 supervisord4j-1.0.0-20210711-191007-bootJar
-rw-r--r-- 1 tao.zeng staff 48M 7 11 19:10 supervisord4j-1.0.0-20210711-191007-bootJar.tar.gz
-rw-r--r-- 1 tao.zeng staff 48M 7 11 19:10 supervisord4j-1.0.0-20210711-191007-bootJar.zip
drwxr-xr-x 3 tao.zeng staff 96B 7 11 19:10 supervisord4j-1.0.0-20210711-191007-incr
-rw-r--r-- 1 tao.zeng staff 69K 7 11 19:10 supervisord4j-1.0.0-20210711-191007-incr.tar.gz
-rw-r--r-- 1 tao.zeng staff 70K 7 11 19:10 supervisord4j-1.0.0-20210711-191007-incr.zip
drwxr-xr-x 3 tao.zeng staff 96B 7 11 19:10 supervisord4j-1.0.0-20210711-191007-release
-rw-r--r-- 1 tao.zeng staff 57M 7 11 19:10 supervisord4j-1.0.0-20210711-191007-release.tar.gz
-rw-r--r-- 1 tao.zeng staff 57M 7 11 19:10 supervisord4j-1.0.0-20210711-191007-release.zip
-rw-r--r-- 1 tao.zeng staff 29K 7 11 19:10 supervisord4j-1.0.0.jar
drwxr-xr-x 3 tao.zeng staff 96B 7 11 19:10 test-classes
通过spring-boot-maven-plugin
、maven-jar-plugin
、maven-dependency-plugin
、maven-assembly-plugin
四个maven插件进行组合,完成了Spring Boot程序打包分发,可以一次性实现全量包,增量包已经fatjar方式的自动化作业,根据需要进行选择。