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 许可协议。转载请注明来自 博客
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论