springboot maven-assembly-plugin使用
官网:Apache Maven Assembly Plugin – Introduction
**********************
maven assembly plugin
The Assembly Plugin for Maven enables developers to combine project output into a single
distributable archive that also contains dependencies, modules, site documentation, and
other files.
# assembly插件可将project output、dependencies、模块、site文档等文件整合为一个文档
支持的文档格式
Currently it can create distributions in the following formats:
zip、tar、jar、dir、war
tar.gz (or tgz)
tar.bz2 (or tbz2)
tar.snappy
tar.xz (or txz)
and any other format that the ArchiveManager has been configured for
assembly descriptor format:描述归档文件的项目结构
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
<id/> <!-- assembly.xml文件id -->
<formats/> <!-- 生成的文档格式,可为多个,如zip、tar等 -->
<includeBaseDirectory/> <!-- 是否包含baseDirectory,默认为true -->
<baseDirectory/> <!-- 如果没有设置,并且includeBaseDirectory设置为true
baseDirectory默认为:${project.build.finalName} -->
<includeSiteDirectory/> <!-- 是否包含siteDirectory,默认为false -->
<!-- containerDescriptorHandlers设置 -->
<containerDescriptorHandlers>
<containerDescriptorHandler>
<handlerName/>
<configuration/>
</containerDescriptorHandler>
</containerDescriptorHandlers>
<!-- module设置 -->
<moduleSets>
<moduleSet> <!-- A moduleSet represent one or more project <module>
present inside a project's pom.xml -->
<useAllReactorProjects/>
<includeSubModules/>
<includes/>
<excludes/>
<sources> <!-- Contains configuration options for including the source
files of a project module in an assembly -->
<useDefaultExcludes/>
<outputDirectory/>
<includes/>
<excludes/>
<fileMode/>
<directoryMode/>
<fileSets>
<fileSet>
<useDefaultExcludes/>
<outputDirectory/>
<includes/>
<excludes/>
<fileMode/> <!-- 文件权限 -->
<directoryMode/> <!-- 目录权限 -->
<directory/>
<lineEnding/>
<filtered/>
<nonFilteredFileExtensions/>
</fileSet>
</fileSets>
<includeModuleDirectory/>
<excludeSubModuleDirectories/>
<outputDirectoryMapping/>
</sources>
<binaries> <!-- Contains configuration options for including the
binary files of a project module in an assembly -->
<outputDirectory/>
<includes/>
<excludes/>
<fileMode/>
<directoryMode/>
<attachmentClassifier/>
<includeDependencies/>
<dependencySets>
<dependencySet>
<outputDirectory/>
<includes/>
<excludes/>
<fileMode/>
<directoryMode/>
<useStrictFiltering/>
<outputFileNameMapping/>
<unpack/>
<unpackOptions>
<includes/>
<excludes/>
<filtered/>
<nonFilteredFileExtensions/>
<lineEnding/>
<useDefaultExcludes/>
<encoding/>
</unpackOptions>
<scope/>
<useProjectArtifact/>
<useProjectAttachments/>
<useTransitiveDependencies/>
<useTransitiveFiltering/>
</dependencySet>
</dependencySets>
<unpack/>
<unpackOptions> <!-- Specifies options for including/excluding/filtering
items extracted from an archive -->
<includes/>
<excludes/>
<filtered/>
<nonFilteredFileExtensions/>
<lineEnding/>
<useDefaultExcludes/>
<encoding/>
</unpackOptions>
<outputFileNameMapping/>
</binaries>
</moduleSet>
</moduleSets>
<!-- fileSet设置 -->
<fileSets>
<fileSet> <!-- A fileSet allows the inclusion of groups of files into the assembly -->
<useDefaultExcludes/>
<outputDirectory/>
<includes/>
<excludes/>
<fileMode/>
<directoryMode/>
<directory/>
<lineEnding/>
<filtered/>
<nonFilteredFileExtensions/>
</fileSet>
</fileSets>
<!-- file设置 -->
<files>
<file> <!-- A file allows individual file inclusion with the option to
change the destination filename not supported by fileSets -->
<source/> <!-- either source or sources is required -->
<sources/>
<outputDirectory/>
<destName/>
<fileMode/>
<lineEnding/>
<filtered/>
</file>
</files>
<!-- dependency设置 -->
<dependencySets>
<dependencySet> <!-- A dependencySet allows inclusion and exclusion
of project dependencies in the assembly -->
<outputDirectory/>
<includes/>
<excludes/>
<fileMode/>
<directoryMode/>
<useStrictFiltering/>
<outputFileNameMapping/>
<unpack/>
<unpackOptions>
<includes/>
<excludes/>
<filtered/>
<nonFilteredFileExtensions/>
<lineEnding/>
<useDefaultExcludes/>
<encoding/>
</unpackOptions>
<scope/>
<useProjectArtifact/>
<useProjectAttachments/>
<useTransitiveDependencies/>
<useTransitiveFiltering/>
</dependencySet>
</dependencySets>
<!-- repository设置 -->
<repositories>
<repository> <!-- Defines a Maven repository to be included in the assembly -->
<outputDirectory/>
<includes/>
<excludes/>
<fileMode/>
<directoryMode/>
<includeMetadata/>
<groupVersionAlignments>
<groupVersionAlignment>
<id/>
<version/>
<excludes/>
</groupVersionAlignment>
</groupVersionAlignments>
<scope/>
</repository>
</repositories>
<!-- Specifies the shared components xml file location -->
<componentDescriptors/>
</assembly>
**********************
示例
配置文件、依赖jar包外置,将配置文件、依赖jar包、项目jar包归档压缩
assembly.xml
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
<id>assembly</id>
<formats>
<format>tar.gz</format>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>${project.build.directory}/config</directory>
<outputDirectory>config</outputDirectory>
</fileSet>
<fileSet>
<directory>${project.build.directory}/lib</directory>
<outputDirectory>lib</outputDirectory>
</fileSet>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>.</outputDirectory>
<includes>
<include>${project.build.finalName}.jar</include>
</includes>
</fileSet>
</fileSets>
</assembly>
pom.xml
<?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.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>hello</finalName>
<plugins>
<!-- 项目jar包不包含依赖jar包 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
</plugin>
<!-- maven jar打包创建,添加classpath配置 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<type>jar</type>
<includeTypes>jar</includeTypes>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<!-- maven assembly文件归档压缩 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<descriptors>
<descriptor>src/main/resources/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<!-- 配置文件外置 -->
<resources>
<resource>
<targetPath>${build.directory}/config</targetPath>
<directory>src/main/resources</directory>
<includes>
<include>*.properties</include>
<include>*.yml</include>
</includes>
</resource>
</resources>
</build>
</project>
项目打包
解压hello-assembly.tar.gz:配置文件、依赖jar包、项目jar包都已打包