常用maven打包插件
1. maven-jar-plugin 插件
使用场景:通常我们在开发的时候会有很多个模块,模块与模块之间的依赖便是通过jar包来导入,形成传递依赖。正常情况下,一个工程打包后就可以提供给其他工程使用。但是如果这个jar自己需要使用,同时又要提供其中一部分能力给别人使用,那么我们就需要将此工程打包成两个文件,而提供给第三方使用的jar包需要打入特定的java文件。
在pom文件中,加入如下配置:
<build> <resources>
<resource>
<!-- 将此目录下的资源文件也打入jar包中 -->
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>app-sdk</id>
<!-- 将jar目标绑定到package阶段中,那么在package阶段运行时将执行此goal -->
<goals><goal>jar</goal></goals>
<phase>package</phase>
<configuration>
<!-- 将此目录下的文件编译打包,classifier用于区分jar包的多个版本 -->
<classesDirectory>src/main/java</classesDirectory>
<classifier>sdk</classifier>
<includes>
<!-- 指定哪些文件打入jar包,即定制化打包 -->
<include>**/FingerprintTookit.java</include>
<include>**/SignatureEntity.java</include>
<include>**/SignatureConst.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
各个标签的作用在注释中也都简单解释了,当我们执行mvn clean package的时候,在控制台可以看到如下信息。此工程执行了两次打包,第一次的id为 default-jar的一个目标,第二次执行的是id 为app-sdk 的打包。并且其最后的文件格式为:artifactId-version-classifier的格式,当引用此jar的时候也需要加上标签:<classifier>sdk</classifier>
最后的打包结果:
因此,我们可以知道,即使在工程的pom.xml文件下不加入 maven-jar-plugin 插件,mvn package 也会执行默认的打包。请注意,如果我们打包的时候指定了运行的main函数,也就是说此jar包是可运行的文件,在其他模块引用的时候,将无法导包。
2. 插件:spring-boot-maven-plugin
先贴个官方文档:https://docs.spring.io/spring-boot/docs/current/maven-plugin/reference/html/
spring-boot-maven-plugin 插件以Maven的方式为Springboot应用提供支持,能够将Springboot应用打包为可执行的jar或war文件,进行相应部署后即可启动Springboot应用。
(1)对于使用了 spring-boot-starter-parent 的项目, 只需在properties中指定start-class启动类即可 。
<parent> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath />
</parent>
<properties>
<start-class>com.bootdo.MyApplication</start-class>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
并且以下目标都可以使用,而不需要其他配置:spring-boot:repackage,spring-boot:run,spring-boot:start,spring-boot:stop
(2) 如果没有继承spring-boot-starter-parent,则需要手动配置,比如打包,这样就可以使用 mvn spring-boot:repackage 命令了
<build> <plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.1.RELEASE</version>
<configuration>
<mainClass>${start.class}</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
layout属性可以是jar,war,zip(dir),这样打出来的包包含: BOOT-INF/classes
和 BOOT-INF/lib,
也就是说源码和依赖包是分开,这样呢方便在容器化的时候替换或者映射,同时,还可以进一步分层,添加以下配置:
<configuration> <layers>
<enabled>true</enabled>
</layers>
</configuration>
这样可以得到包含以下四个目录的jar包:
dependencies
不包含SNAPSHOT的依赖包
spring-boot-loader
jar包启动类snapshot-dependencies
版本包含SNAPSHOT的依赖
application
应用和资源类
以上的分层配置等价下面的配置,也就是可以按照下面的方式进行定制化分层打包
<project> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.1.RELEASE</version>
<configuration>
<layers>
<enabled>true</enabled>
<configuration>${project.basedir}/src/layers.xml</configuration>
</layers>
</configuration>
</plugin>
</plugins>
</build>
</project>
<layers xmlns="http://www.springframework.org/schema/boot/layers" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/boot/layers
https://www.springframework.org/schema/boot/layers/layers-2.3.xsd">
<application>
<into layer="spring-boot-loader">
<include>org/springframework/boot/loader/**</include>
</into>
<into layer="application" />
</application>
<dependencies>
<into layer="snapshot-dependencies">
<include>*:*:*SNAPSHOT</include>
</into>
<into layer="dependencies" />
</dependencies>
<layerOrder>
<layer>dependencies</layer>
<layer>spring-boot-loader</layer>
<layer>snapshot-dependencies</layer>
<layer>application</layer>
</layerOrder>
</layers>
更多超实用的使用案例,可以参考这里:https://docs.spring.io/spring-boot/docs/current/maven-plugin/reference/html/#repackage-examples
3. 插件:maven-assembly-plugin
使用场景,当项目开发好了,需要对外提供一整套的运行包,包括配置文件,启动脚本,停止脚本等文件,在使用springboot开发的时候,最后的文件就是一个可运行的jar包,因此需要手动组装一些必要的文件,版本发布的时候每次都人工的拷贝文件,岂不是很麻烦,这个时候就需要此插件了。
典型配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-pkg</id>
<phase>package</phase>
<goals>
<goal>attached</goal>
</goals>
</execution>
</executions>
</plugin>
最主要的就是desriptor标签,它指定了一个assembly.xml的文件位置。也就是说核心配置在此文件中。
<?xml version="1.0" encoding="UTF-8"?><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>all</id>
<formats>
<format>tar.gz</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<files>
<file>
<source>${project.build.directory}/${output.filename}.jar</source>
<outputDirectory></outputDirectory>
<fileMode>0755</fileMode>
</file>
<file>
<source>src/main/resources/application.properties</source>
<outputDirectory>config</outputDirectory>
<fileMode>0755</fileMode>
</file>
</files>
<fileSets>
<fileSet>
<directory>src/main/resources/scripts</directory>
<outputDirectory></outputDirectory>
<filtered>true</filtered>
<fileMode>0755</fileMode>
</fileSet>
</fileSets>
</assembly>
id/formats
- formats是assembly插件支持的打包文件格式,有dir、zip、tar、tar.gz、tar.bz2、jar、war。可以同时定义多个format。一般采tar.gz,解压后就会得到标准的目录结构。而dir直接就是以目录的形式展示。
- id则是添加到打包文件名的标识符,用来做后缀。
fileSets/fileSet
用来设置一组文件在打包时的属性。
- directory:源目录的路径。
- includes/excludes:设定包含或排除哪些文件,支持通配符。
- fileMode:指定该目录下的文件属性,采用Unix八进制描述法,默认值是0644。对于可执行的文件就写0755,在Linux环境就能直接运行。
- outputDirectory:生成目录的路径。不写就是默认的当前打包下。
files/file
与fileSets大致相同,不过是指定单个文件,并且还可以通过destName属性来设置与源文件不同的名称。
完整的使用方法请参考官方文档:
http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html
参考博客:
https://www.cnblogs.com/april-chen/p/10414857.html
https://www.jb51.net/article/186732.htm
以上是 常用maven打包插件 的全部内容, 来源链接: utcz.com/z/518472.html