Spring Boot分离jar打包,归档压缩包


经常会遇到项目源代码和发布环境不在一起的情况,这时候就需要拷贝打包以后的文件到客户现场进行安装,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-pluginmaven-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-pluginmaven-jar-pluginmaven-dependency-pluginmaven-assembly-plugin四个maven插件进行组合,完成了Spring Boot程序打包分发,可以一次性实现全量包,增量包已经fatjar方式的自动化作业,根据需要进行选择。

以上实例代码:https://gitee.com/iogogogo/supervisord-spring-boot


文章作者: 阿牛
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 阿牛 !
评论
  目录