diff --git a/source/_posts/maven-plugins-in-common-use.md b/source/_posts/maven-plugins-in-common-use.md
new file mode 100644
index 0000000..1511d71
--- /dev/null
+++ b/source/_posts/maven-plugins-in-common-use.md
@@ -0,0 +1,325 @@
+---
+title: 常用的Maven插件记录
+tags:
+ - JVM
+ - Java
+ - Maven
+ - Plugins
+categories:
+ - - JVM
+ - 构建工具
+keywords: 'maven,plugins,插件'
+date: 2021-06-10 17:32:15
+---
+
+Maven是一个依赖插件执行的框架,每个任务实际上都是由插件完成的。插件通常提供的是一个目标(goal)的集合,也就是命令行格式`mvn [options] [goals] [phases]`中的`[goals]`。要执行一个插件的目标,可以使用命令格式`mvn [plugin-name]:[goal-name]`,例如`mvn jetty:run`。
+
+在Maven中有Build和Report两种类型的插件,其中Build用于在构建时执行,Report用于在网站生成过程中执行。
+
+每个插件可以有多个目标,插件可以使用`phase`元素来定义执行时机。要执行的任务则需要绑定到插件的目标上来执行。以下给出一个示例。
+
+```xml
+
+
+
+
+ org.apache.maven.plugins
+ maven-antrun-plugin
+ 1.1
+
+
+
+ on.clean
+
+ clean
+
+
+ run
+
+
+
+
+ Now in clean phase.
+
+
+
+
+
+
+
+```
+
+## maven-compiler-plugin
+
+Compiler插件主要用来编译项目源码。在POM中一般用来配置编译所接受的源码版本和编译后能够适应的Java运行时版本。代码版本的配置有两种方式,一种是通过配置项指定,一种是通过配置插件指定。
+
+以下是通过配置项指定的示例。
+
+```xml
+
+
+
+ 1.8
+
+ 1.8
+
+
+```
+
+或者可以直接配置插件。
+
+```xml
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ 1.8
+ 1.8
+
+
+
+
+
+```
+
+## maven-antrun-plugin
+
+Antrun插件用来在一些指定阶段中运行Ant任务,并且对书写在POM中的Ant任务提供支持。Antrun插件在前面一些章节已经有所接触,其具体使用格式如下。
+
+```xml
+
+ maven-antrun-plugin
+ 1.8
+
+
+
+
+
+
+
+
+ run
+
+
+
+
+```
+
+## maven-jar-plugin
+
+Jar插件主要用来增强构建Jar包的功能,为Jar包中增加`MANIFEST.MF`文件,或者通过提供`MANIFEST.MF`中所需的内容来自动构建`MANIFEST.MF`文件。
+
+以下示例可以打包一个可执行的Jar包。
+
+```xml
+
+ maven-jar-plugin
+ 3.2.0
+
+
+
+ true
+ lib/
+ com.example.MainApp
+
+
+
+
+```
+
+配置好的项目可以通过命令`mvn jar:jar`来完成打包。
+
+## maven-shade-plugin
+
+Shade插件是用来建立Uber-Jar(FatJar)的。Uber-Jar将所有的依赖都包含在了Jar包中,在运行时可以不受外界运行时环境的影响。Shade插件提供了两个目标,但其中只有`shade:shade`是用来打包的。
+
+使用以下最简单的配置就可以打出一个Uber-Jar包。
+
+```xml
+
+ maven-shade-plugin
+ 3.2.1
+
+
+ package
+
+ shade
+
+
+
+
+```
+
+要创建一个可执行的Jar包,就需要指定主类,主类是在`execution`元素中的`configuration`元素中定义的。
+
+```xml
+
+
+
+
+
+ com.example.MainApp
+
+
+
+
+
+```
+
+常用的`Transformer`类都定义在`org.apache.maven.shade.resources`包中,主要有以下这些。
+
+* `AppendingTransformer`,向资源中添加一个内容。
+* `IncludeResourcesTransformer`,向项目中添加文件。
+* `ManifestResourcesTransformer`,向`MANIFEST.MF`中设定内容。
+* `XmlAppendingTransformer`,向XML资源中添加一个XML文件。
+
+除此之外,`configuration`元素中还可以使用以下子元素来实现相应的功能。
+
+* `filters/filter/[includes|excludes]`,过滤Jar包中的类或者资源。
+* `artifactSet/[includes|excludes]`,指定需要打包的Jar。
+* `minimizedJar`,自动排除不使用的类。
+
+## maven-assembly-plugin
+
+Assembly插件是用来执行定制化打包操作的。Assembly插件提供了两种打包方式,第一种是通过`descriptorRefs`元素来指定使用官方统一定制的打包方式,常用的主要有`bin`、`jar-with-dependencies`、`src`等。
+
+官方统一定制的打包方式可以使用以下方式配置。
+
+```xml
+
+ maven-assembly-plugin
+ 3.2.0
+
+
+ jar-with-dependencies
+
+
+
+```
+
+另一种定制打包方式是使用`descriptors`元素来指定打包配置文件,通过配置文件来定制打包操作。这种方式的用法如下例所示。
+
+```xml
+
+ maven-assembly-plugin
+ 3.2.0
+
+
+ src/assembly/src.xml
+
+
+
+```
+
+打包配置文件也是一个XML文件,以下是其中可以使用的示例格式以及各个元素的含义,更详细的配置文件格式需要参考[Assembly插件](https://maven.apache.org/plugins/maven-assembly-plugin/assembly.html)的文档。
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0755
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+## exec-maven-plugin
+
+Exec插件主要用来支持Maven快速启动Java程序,可以在不打包为Jar文件时快捷的启动程序,而无需等待漫长的打包时间。Exec插件提供了两个目标可供使用:`exec:java`和`exec:exec`。其中`exec:java`可以用来启动比较简单不需要复杂命令行配置的Java应用,而`exec:exec`则更适合于启动需要复杂配置的应用。
+
+以下配置了`exec:java`目标来启动Java应用。
+
+```xml
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 1.6.0
+
+
+
+ java
+
+
+
+
+ com.example.MainApp
+
+
+ ...
+
+
+
+
+
+
+
+
+
+
+```
+
+使用`exec:exec`目标就更加复杂,但可以更加灵活。
+
+```xml
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 1.6.0
+
+
+
+ exec
+
+
+
+
+ java
+
+
+
+
+
+
+```