Springcloud学习笔记53--使用Maven的assembly插件实现自定义打包
1.常见的maven打包插件
maven插件是在生命周期中某些阶段执行的任务。一个插件完成一项功能。以下介绍几种常见的插件。
plugin | function |
---|---|
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