Springcloud学习笔记53--使用Maven的assembly插件实现自定义打包

1.常见的maven打包插件

maven插件是在生命周期中某些阶段执行的任务。一个插件完成一项功能。以下介绍几种常见的插件。

pluginfunction
maven-jar-plugin maven 默认打包插件,用来创建 project jar
spring-boot-maven-plugin 用来打可执行包,executable(fat) jar
maven-assembly-plugin 支持定制化打包方式,例如 apache 项目的打包方式

1.1 maven-jar-plugin

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.3.2</version>
            </plugin>        

1.2 spring-boot-maven-plugin

spring-boot-maven-plugin插件是将springboot的应用程序打包成fat jar的插件。首先我们说一下啥叫fat jar。fat jar 我们暂且叫他胖jar吧,实在是找不到官方叫法了。我们一般的jar,里面放的是.class文件已经resources目录下的东西,但是fat jar 它可以把jar作为内容包含进去。也就是说,spring boot 借助spring-boot-maven-plugin将所有应用启动运行所需要的jar都包含进来,从逻辑上将具备了独立运行的条件。

jar包是可以解压的,这就是使用插件打出来的jar包解压后的目录。

BOOT-INF:存放的该项目编译后的class文件,和依赖的jar包。
META-INF:存放了项目的依赖jar包关系。
org:存放了springboot相关的一些class文件。

2. maven-assembly-plugin

2.1 在pom中引入插件

           <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>1.9.1</version>
                <executions>
                    <execution>
                        <id>timestamp-property</id>
                        <goals>
                            <goal>timestamp-property</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <name>build.time</name>
                    <pattern>yyyyMMdd</pattern>
                    <timeZone>GMT+8</timeZone>
                    <regex/>
                    <source/>
                    <source/>
                    <value/>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.1.1</version>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <descriptors>
                        <descriptor>${project.basedir}/src/main/assembly/assembly.xml</descriptor>
                    </descriptors>
                    <appendAssemblyId>false</appendAssemblyId>
                    <!--suppress UnresolvedMavenProperty -->
                    <finalName>app.flep-online-test.${build.time}01</finalName>
                </configuration>
            </plugin>

${project.basedir}的值是maven自带的,不是配置的。它默认是pom文件的上一级。

<!--配置描述文件路径--> 
<descriptor>${project.basedir}/src/main/assembly/assembly.xml</descriptor>

2.2 配置assembly.xml文件

接着在src/main/assembly文件中配置assembly.xml文件

<?xml version="1.0" encoding="utf-8"?>
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3">
    <id>${project.version}</id>
    <formats>
        <format>tar.gz</format>
        <format>dir</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>${project.build.directory}/classes</directory>
            <outputDirectory>flep-online-test/config</outputDirectory>
            <fileMode>0755</fileMode>
            <includes>
                <include>application.yml</include>
                <include>application-${flep-profile}.yml</include>
            </includes>
        </fileSet>
        <!--<fileSet>-->
            <!--<directory>${project.build.directory}/classes/testfile</directory>-->
            <!--<outputDirectory>flep-online-test/testfile</outputDirectory>-->
            <!--<fileMode>0755</fileMode>-->
            <!--<includes>-->
                <!--<include>indicate.txt</include>-->
                <!--<include>innerfile.txt</include>-->
                <!--<include>subscribefile.log</include>-->
            <!--</includes>-->
        <!--</fileSet>-->
        <!--<fileSet>-->
            <!--<directory>${project.build.directory}/classes/sh</directory>-->
            <!--<outputDirectory>flep-online-test/shbin</outputDirectory>-->
            <!--<fileMode>0755</fileMode>-->
            <!--<includes>-->
                <!--<include>start9002.sh</include>-->
                <!--<include>stop9002.sh</include>-->
            <!--</includes>-->
        <!--</fileSet>-->
        <fileSet>
            <directory>${project.build.directory}</directory>
            <outputDirectory>flep-online-test</outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>

备注:

<format>tar.gz</format><!--打包的文件格式,也可以有:war zip-->

参考文献:https://www.cnblogs.com/hafiz/p/6538332.html

posted @ 2022-11-25 10:32  雨后观山色  阅读(479)  评论(0编辑  收藏  举报