From fee2a6f9333287772501800d4dfceeaff15f69ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B6=9B?= Date: Thu, 10 Jun 2021 17:32:41 +0800 Subject: [PATCH] =?UTF-8?q?post:=E5=A2=9E=E5=8A=A0Maven=E5=B8=B8=E7=94=A8?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E6=96=87=E7=AB=A0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/_posts/maven-plugins-in-common-use.md | 325 +++++++++++++++++++ 1 file changed, 325 insertions(+) create mode 100644 source/_posts/maven-plugins-in-common-use.md 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 + + + + + + +```