maven生命周期和插件、依赖管理

文章目录

    • 前言
    • 生命周期和插件
        • 生命周期和阶段
        • 插件和目标
        • 生命周期和插件的关系
    • 谈谈依赖范围

前言

《Maven实战》是本好书,工作这么久了,maven的很多东西天天见,却不知道为什么这么用,这本书可以解答你的疑惑。

生命周期和插件

生命周期和阶段

Maven拥有三套生命周期:clean、default和site。
每一个生命周期拥有多个阶段(phase),每个阶段用来执行特定的操作。

  • clean
    阶段:pre-clean、clean、post-clean
  • default
    阶段:validate、initialize、generate-sources、process-sources(处理资源文件)、generate-resources、process-resources、compile(编译源码)、process-classes、generate-test-sources、process-test-sources、generate-test-resources、process-test-resources、test-compile、process-test-classes、test(测试代码)、prepare-package、package(打包成jar/war)、pre-integration-test、integration-test、post-integration-test、verify、install(安装到本地仓库)、deploy(部署到远程仓库)
  • site
    pre-site(生成站点的准备工作)、site(生成站点文档)、post-site(生成站点的结束工作)、site-deploy(站点部署到服务器)

阶段是顺序执行的,而且当前阶段的执行依赖于前面阶段的完成,比如我们执行mvn clean,实际上执行了pre-clean和clean两个阶段。
举个耳熟能详的例子:mvn clean install这个命令怎么理解?
这个命令执行clean生命周期的pre-clean、clean阶段和default生命周期的validate到install阶段。

插件和目标

maven的每一个插件对应多个目标(goal),每个目标完成一个操作,比如maven-dependency-plugin的常见目标有analyze、tree、list,命令的写法为dependency:analyze、dependency:tree、dependency:list。

生命周期和插件的关系

插件的一些目标和生命周期的阶段是绑定的,通过执行插件的目标,我们可以调用生命周期某些阶段。

谈谈依赖范围

maven有六种依赖范围:compile、test、provided、runtime、system、import

  • compile:默认。编译/测试/运行引入
  • test:测试引入
  • provided:编译/测试引入。比如servlet-api.jar是provided范围的,因为运行时tomcat等容器会提供该依赖,如果不是依赖范围,可能会出现问题。参照鄙人以前的采坑记录Xxx is not a Servlet
  • runtime:测试/运行引入。比如mysql驱动包
  • system:指定依赖包。不建议使用,因为引入的是非maven仓库的依赖,不利于maven管理。用法
<scope>systemscope>
<systemPath>${java.home}/lib/rt.jarsystemPath>
  • import:只有在dependencyManagement下才有效。
    先说说dependencyManagement: 这玩意通常在父pom文件下定义,用来统一管理依赖的版本、范围等,子模块通过指定父pom,如果需要引入父模块依赖管理中定义的依赖,就可以无需提供版本、依赖范围,当然,也可以提供,只不过会覆盖。注意:依赖管理虽然类似于面向对象的继承,但是这种继承并不是完全的,子模块如果未定义父模块依赖管理中的依赖,那么这些依赖就不会被子模块引入。
    那么import有什么用呢?import的作用是引入其他pom文件中的依赖管理,比如,在创建springboot项目中,在父pom文件中经常看到import的使用。
  <dependencyManagement>
    <dependencies>
      
      <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-dependenciesartifactId>
        <version>${spring.boot.version}version>
        <type>pomtype>
        <scope>importscope>
      dependency>
      dependencies>
  dependencyManagement>

你可能感兴趣的:(maven)