生命周期
生命周期
Maven中存在三种生命周期:clean、default、site,分别用于清理项目、构建项目、生成项目站点,而在一个生命周期中通常又会包含若干个阶段。
如果执行某个生命周期, 周期中的所有阶段都会执行 ; 如 : mvn clean ;
mvn clean 中的clean就是上面的clean,在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,也就是说,mvn clean 等同于 mvn pre-clean clean ,如果我们运行 mvn post-clean ,那么 pre-clean,clean 都会被运行。这是Maven很重要的一个规则,可以大大简化命令行的输入。
生命周期绑定
Maven 的每个生命周期阶段都可以绑定一个或多个插件,当运行当前生命周期阶段时,Maven 就会执行该生命周期阶段绑定的所有插件。准确的说,Maven 的生命周期绑定的其实并不是插件,而是插件的目标(Goal)。
一个插件会有一个或多个功能, 每一个功能就对应一个插件目标。比如maven-dependency-plugin 插件有十多个功能(目标)。
比如dependency:list、dependency:tree和dependency:analyze这些都是插件目标,这是一种通用的写法,冒号前面是插件前缀,冒号后面是该插件的目标。
每个插件可以有多个目标,每个目标绑定一个生命周期阶段,反过来,每个生命周期阶段可以绑定多个插件目标,这些插件目标可以属于不同的插件。
我们可以通过 Maven 命令指定运行某个阶段,而运行某个阶段等价于运行该阶段绑定的所有插件目标,所以很自然地,我们应当也可以直接运行某个插件模板,Maven 执行具体插件目标的格式如下:mvn plugin-prefix:goal 。
自定义生命周期绑定
在POM的build元素下的plugins子元素中声明插件的使用,插件在Maven中同其它包一样,也是作为独立的构建存在,所以也需要通过指定groupId、artifactId和version这三个坐标元素去仓库中定位插件。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.jellythink.HelloWorld.App</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
除了基本的插件坐标声明外,还有插件执行配置,executions下每个execution子元素可以用来配置执行一个任务。上述例子中通过phase配置,将其绑定到package生命周期阶段上,再通过goals配置指定要执行的插件目标,这样自定义插件绑定就完成了。
执行mvn clean install命令,我们就可以看到这样的输出:
[INFO] --- maven-shade-plugin:3.2.1:shade (default) @ hello-world ---
[INFO] Replacing original artifact with shaded artifact.
[INFO] Replacing E:\Code\Spring\helloworld\target\hello-world-1.0-SNAPSHOT.jar with E:\Code\Spring\helloworld\target\hello-world-1.0-SNAPSHOT-shaded.jar
插件配置
我们在实现一个功能时,也会想着通过传递参数来实现更强大的功能。Maven插件也是这样的,我们可以配置插件目标的参数,满足我们对插件更加个性化的要求。对于插件的参数配置,有以下两种常用方式:
- 通过命令行进行插件配置
mvn clean install -Dmaven.test.skip=true
这个就是典型的通过命令行进行插件配置,maven.test.skip是maven-surefire-plugin提供的一个参数,我们通过命令行传入一个true参数,表示跳过执行测试。
参数-D是Java自带的,其功能是通过命令行设置一个Java系统属性。Maven简单的重用了该参数。
- 通过POM文件进行插件配置
比如有些参数配置,从项目创建到项目发布都不会改变,或者基本上很少改变。对于这种场景,就更适合通过POM文件进行插件配置。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>

浙公网安备 33010602011771号