avatar

maven学习二

概念模型

根据官网定义,maven分为固定三个大类的生命周期,简单理解maven构建过程就是通过mvn来逐步执行生命周期的过程.
lifecycle由phase构成,简单来说phase才是maven固定的执行逻辑,每个phase会执行绑定在其上的goal,而goal
则是由plugin实现的

生命周期lifecycle

  • Clean Lifecycle
  • Default Lifecycle
  • Site LifeCycle

maven默认会在各个phase中绑定不同的插件,并且执行默认的goal,mvn:phase命令会执行当前生命周期中的之前的phase,
例如:mvn install会导致

插件plugin

maven本身开发并没有含有功能,只有当用户指定了plugin,由maven执行过程中调用plugin来处理对应的phase,因此maven编译后并不大
maven中插件实际上就是按照maven标准开发的jar,每个plugin包含了若干个goal,只有当其绑定到phase中时,在执行生命周期
命令时才会被调用

  • mvn命令:
    • mvn phase :会触发改pahse所在的生命周期之前并且包含自身的pahse
    • mnv plugin:goal :用来调用对应插件的的goal,其中plugin部分表现为gourpId:artifact:version:goal
  • 缩减调用插件goal命令
    当调用maven默认的插件如mvn clean:clean,即调用org.apache.maven.plugins:maven-clean-plugin: clean可以简写,原因是maven源码
    启动的时候会自动寻找groupId为[org.apache.maven.plugins, org.codehaus.mojo],并且artifactmaven-[pluginName]-plugin的依赖并调用
  • 自定义maven插件的命名方式
    • artifact一般命名为pluginname-maven-plugin
    • groupId随意,如果想要使用maven原生插件一样,则需要主动在user/setting.xml中添加,参考插件命名
      1
      2
      3
      <pluginGroups>
      <pluginGroup>sample.plugin</pluginGroup>
      </pluginGroups>

常见插件

官方插件可以去看jar包结构,一般都存在一个plugin.xml描述了该插件的mojo信息,
同时使用mvn plugin:help -Ddetail=ture -Dgoal=xx可以显示该goal的参数信息

clean插件

功能

默认删除project.build.directory,project.build.outputDirectory,project.build.testOutputDirectory,project.reporting.outputDirectory

  • 删除额外的文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<build>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<filesets>
<fileset>
<directory>some/relative/path</directory>
<includes>
<include>**/*.tmp</include>
<include>**/*.log</include>
</includes>
<excludes>
<exclude>**/important.log</exclude>
<exclude>**/another-important.log</exclude>
</excludes>
<followSymlinks>false</followSymlinks>
</fileset>
</filesets>
</configuration>
</plugin>
</build>
  • 跳过clean阶段
    maven中一些去其他的插件也是如此跳过的,如负责执行JUnit 的surefire插件
1
2
3
<configuration>
<skip>ture</skip>
</configuration>
文章作者: fancylight
文章链接: https://www.fancylight.top/2020/04/23/maven%E5%AD%A6%E4%B9%A0%E4%BA%8C/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 博客
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论