05生命周期和插件

生命周期和插件

什么是生命周期?

Maven 构建生命周期就是 Maven 将一个整体任务划分为一个个的阶段,类似于流程图,按顺序依次执行。也可以指定该任务执行到中间的某个阶段结束。
Maven 的内部有三个构建生命周期,分别是 clean, default, site。

周期之间互相独立,周期内的阶段有前置依赖。

如何使用构建生命周期来完成构建工作?

使用mvn命令,如执行mvn install命令,将完成validate, compile, test, package, verify, install阶段
也可以指定多个阶段,如执行mvn clean deploy命令,首先完成的clean lifecycle,将以前构建的文件清理,然后再执行default lifecycle的validate, compile, test, package, verify, insstall, deploy 阶段,将package阶段创建的包发布到远程仓库中。

什么是插件?

生命周期只是抽象的概念,具体Maven对工程的所有操作实实在在的都是由插件来完成的。一个插件可以支持多种功能,称之为目标(goal),例如:compiler插件有两个目标:compile和testCompile,分别实现编译源代码和编译测试代码。

生命周期和插件的关系?

一个插件可能有一个或多个插件目标。生命周期的某个阶段可以绑定一个或多个插件目标;一个插件目标也可以绑定到一个或多个生命周期阶段。他们是多对多的关系。

如何绑定生命周期和插件?

1
2
3
4
5
6
7
8
9
10
11
12
13
<plugin>
<groupId>org.codehaus.modello</groupId>
<artifactId>modello-maven-plugin</artifactId>
<version>1.8.1</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
</plugin>
  • phase:阶段
  • goal:插件目标

插件配置

配置插件目标的参数:

  • 命令行插件配置:mvn install -Dmaven.test.skip=true
  • POM中插件全局配置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <!-- 利用属性传递版本号 -->
    <version>${plugin.version}</version>
    <configuration>
    <!-- 设置编码 -->
    <encoding>UTF-8</encoding>
    <!-- 设置名称 -->
    <warName>ROOT</warName>
    </configuration>
    </plugin>
  • POM中插件目标配置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <!-- 依赖插件 -->  
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.6</version>
    <executions>
    <execution>
    <id>copy-dependencies</id>
    <phase>compile</phase>
    <goals>
    <goal>copy-dependencies</goal>
    </goals>
    <configuration>
    <!-- ${project.build.directory}为Maven内置变量,缺省为target -->
    <outputDirectory>${project.build.directory}/lib</outputDirectory>
    <!-- 表示是否不包含间接依赖的包 -->
    <excludeTransitive>false</excludeTransitive>
    <!-- 表示复制的jar文件去掉版本信息 -->
    <stripVersion>true</stripVersion>
    </configuration>
    </execution>
    </executions>
    </plugin>

获取插件信息

  1. 在线查找插件:
    目前,插件基本上都来源于两处,一个是 Apache;另一个是 Codehaus。因为 Maven 本身就来自 Apache 软件基金会,所有在 Apache 上有很多 Maven 的官方插件,而且每天有很多人在使用这些插件,这些插件都经过了很多项目的实际考验,所以它们比较可靠。
  2. 使用 maven-help-plugin 查看插件:
    mvn help:describe -Dplugin=org.apache.maven.plugins:maven-site-plugin:3.4 -Ddetail
    mvn help:describe -Dplugin=site -Dgoal=site -Ddetail

从命令行调用插件

mvn命令后面除了可以接多个phase外,也可以接多个goal
如:mvn dependency:tree 表示 执行dependency插件的tree目标

上述dependency并不是一个完整的插件坐标,那么如何找到对应的目标?

插件查库和依赖仓库是区分开的,Maven内置的额插件仓库配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Central Repository</name>
<url>http://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
</pluginRepository>
</pluginRepositories>

如果不指定groupId,那么默认是org.apache.maven.plugins
如果不指定version,那么默认是最新版本(包含快照)

本文标题:05生命周期和插件

文章作者:Sun

发布时间:2020年01月14日 - 10:01

最后更新:2020年01月14日 - 10:01

原始链接:https://sunyi720.github.io/2020/01/14/Maven/05生命周期和插件/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。