type
status
date
slug
summary
tags
category
icon
password
一、常用打包插件介绍
打包插件 | 作用 | 优点 | 缺点 |
spring-boot-maven-plugin | springboot 项目默认的打包工具,将项目 jar、资源文件、依赖的三方 jar 全部打到一个 fat-jar。 | 所有的东西都打到一个jar包中,很方便,适合初学者和简单部署的场景 | 无法单独修改配置文件和替换部分依赖 jar,只能重新打包 |
maven-assembly-plugin | Maven 针对打包提供的标准插件,功能强大,推荐使用。 | 通过一个打包描述文件设置 assembly.xml ,能够帮助用户选择具体打包哪些资源文件集合、依赖、模块,甚至本地仓库文件,每个项的具体打包路径用户也能自由控制。 | 需要单独配置 assembly.xml ,稍微略繁琐。 |
maven-shade-plugin | 功能同 maven-assembly-plugin 类似,把整个项目及其相关的依赖打包到一个 user-jar 中 | 能过通过字节码分析自动修剪掉不必要的依赖。
能够通过对依赖的 jar 包的重定向(主要通过重命名的方式)避免依赖冲突 | 配置项较少。
无法打包脚本,配置文件等。 |
maven-jar-plugin | 把本项目打包成 jar 包,通常搭配 maven-dependency-plugin 和 maven-resource-plugin 使用 | 有诸多配置项,很自由,每个步骤都可控 | 打成的最终jar包中没有所依赖的jar包。依赖跟自己的代码不在一个jar包中。部署或者移动的时候,要考虑到多个文件,比较麻烦。 |
maven-dependency-plugin | 将第三方依赖 jar 打包到指定位置 | / | / |
maven-resources-plugin | 针对资源文件打包到执行位置 | / | / |
打包插件如何选择:
- 如果是初学者和简单部署的场景,可以直接使用
spring-boot-maven-plugin
。
- 日常推荐使用
maven-assembly-plugin
,可以搭配maven-jar-plugin
等其他插件使用,实现强大的定制化功能。
- 如果只是需要打包 jar,官方推荐使用
maven-shade-plugin
,但日常用的比较少。
- 如果是老小项目一般使用
maven-jar-plugin
、maven-dependency-plugin
、maven-resources-plugin
这种搭配。
一、使用spring-boot-maven-plugin
springboot 项目默认的打包工具,默认情况下只会将项目源码编译生成的 class 文件和资源文件依赖 jar 包都打进来,即打包
自己项目的class文件 + 环境变量 + 静态资源文件 + 依赖jar
(不会打入)。执行
mvn package
后,会在 target 文件夹下生成两个 jar 包,一个是不带依赖的 jar 包,一个是后缀有-spring-boot
的 jar 包,这个就是 fatjar,如下所示:启动时,直接执行即可:
二、使用maven-assembly-plugin
maven-assembly-plugin
该插件只有一个目标 assembly:single
,默认不会执行,要自己绑定到生命周期阶段。有两种使用方式,第一种可以将所有的东西都打包到一个 jar 包中,默认情况下第三方依赖不是以 jar 包的形式,而是以反编译后的 class 的形式放入打包后的 jar 包。这种方式不推荐使用,更推荐使用第二种自定义配置文件的方式。
执行
mvn package
后,会在target文件夹下生成两个jar包,一个是不带依赖的jar包,一个是后缀有-dependencies
带有依赖的jar包,如:启动时,直接执行即可:
第二种方式配置一个 XML 文件(
assembly.xml
),该文件描述了归档文件的组成部分和各个部分的打包规则。通过该文件可以定义哪些文件需要包含在归档文件中,以及这些文件的排列方式、文件名和目录结构等。同时,还可以通过 Maven 的过滤器机制对文件进行过滤和替换,以适应不同的环境需求。通过这种方式,maven-assembly-plugin
可以实现下面需求:- 配置文件外挂,能够加载 jar 外的配置文件。
- 启动脚本外挂,这个脚本一般是 shell 或者 windows 下的 bat ,有了 Spring Boot 的应用服务脚本后,就可以很容易的去启动和停止 Spring Boot 的应用了。
新建
src/main/assembly/assembly.xml
文件打包后目录如下所示
解压
embedded-jetty-1.0.0-SNAPSHOT-jar-with-dependencies.zip
,得到以下目录- 可以直接 bin 目录下的执行文件,或者执行
java -jar embedded-jetty-1.0.0-SNAPSHOT.jar
运行项目。
- 如果需要修改配置文件,直接修改 config 里面的配置文件。
- 如果修改了项目代码但是项目依赖没有发生变化,重新打包后直接替换
embedded-jetty-1.0.0-SNAPSHOT.jar
即可,非常方便。
三、使用maven-shade-plugin
跟
maven-assembly-plugin
类似,都可以将所有的东西都打包到一个 jar 包中。只有一个插件目标shade:shade
,通常绑定在package
生命周期阶段。官方推荐如果只需要打包一个 jar 包,使用 maven-assembly-plugin
就够了。执行
mvn package
后,会在 target 文件夹下生成两个 jar 包,一个是不带依赖的jar包,一个是后缀有-shaded
带有依赖的jar包,如:启动时,直接执行即可:
四、使用maven-jar-plugin
、 maven-dependency-plugin
和 maven-resources-plugin
首先使用
maven-jar-plugin
把本项目的 class 文件和配置文件打包到一个 jar 包。 然后使用
maven-dependency-plugin
会把所依赖的 jar 包 copy 到指定目录打包结果是,本项目的 class 文件和配置文件在 jar 包中,所依赖的 jar 包在 lib 目录中。
到这一步已经可以执行下面命令即可启动 jar 包了。
默认情况下资源文件被一起打到 jar 包里面,另外把
src/main/resources
复制到 target/classes
,
把 src/test/resources
复制到 target/test-classes
下。如果我们不想把资源文件放到 jar 包里面,而是放到一个指定的位置,就需要用到 maven-resources-plugin
插件了。- Author:mcbilla
- URL:http://mcbilla.com/article/57bc6a0b-1174-449a-a6a0-eef97af3f483
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts