Maven

Maven生命周期
生命周期的概念与意义

在项目构建时通常会包含清理、编译、测试、打包、验证、部署,文档生成等步骤,Maven统一对其整理抽象成三个生命周期(lifecycle)及各自对应的多个阶段(phase)。这么做的意义是:

  • 每个阶段都成为了一个扩展点,可以采用不同的方式来实现,提高了扩展性与灵活性。
    在执行项目构建阶段时可以采用jar方式构建也可以采用war包方式构建提高了灵活性。
  • 统一了maven的执行路径。
maven三大生命周期与其对应的phase(阶段)
  • clean Lifecycle:清理生命周期,用于清理项目

  • default Lifecycle:默认生命周期,用于编译、打包、测试、部署等
    在这里插入图片描述

  • site Lifecycle:站点文档生成,用于构建站点文档。

  • 三大生命周期相互独立执行,也可以合在一起执行。但生命周期中的阶段是有严格执行的顺序的,比如必须是先执行完cpmpile才执行package动作,此外阶段还有包含逻辑存在,当你执行一个阶段时其前面的阶段会自动执行。

生命周期与插件的关系

生命周期的阶段组成了项目构建的完整过程,但这些过程具体由插件来实现,maven的核心部分代码量其实很少,其大部分实现都是由插件来完成的。比如:test 阶段就是由 maven-surefire-plugin 实现。在pom.xml 中我们可以设置指定插件目标(gogal)与阶段(phase)绑定,当项目构建到达指定阶段(phase)手机就会触发插件的执行。一个插件有时会实现多个阶段(phase)比如:maven-compiler-plugin插件分别实现了compile 和testCompile。

总结:

  • 生命周期的阶段可以绑定具体的插件及目标
  • 不同配置下同一阶段可以对应多个插件和目标
  • phase==》plugin==》goal(功能)
生命周期与插件的默认绑定

在我们的项目中并没有配置maven-compiler-plugin插件,但当我们执行compile阶段时一样能够执行编译操作,原因是maven默认为指定阶段绑定了插件实现。

maven基本概念
  • mvn编译命令:mvn compile
  • mvn打包命令:mvn package
  • mvn测试命令:mvn test
  • maven采用了约定的方式从指定项目结构中获取源码与资源文件进行编译打包
    主源码文件:$ {project}/src/main/java
    主资源文件:$ {project}/src/main/resources
    测试源码文件:$ {project}/src/test/java
    测试资源文件:$ {project}/src/test/resources
  • 必须是Test开头的类名与test开头的方法才会自动执行测试方法。
  • 默认远程仓库:
    默认远程仓库 maven central 其配置在
    maven-model-builder-3.2.1.jar\org\apache\maven\model\pom-4.0.0.xml 位置
  • 本地仓库位置:
    本地仓库位置默认在 ~/.m2/respository 下
    要修改 ${M2_HOME}/conf/settings.xml 来指定仓库目录
<!-- 指定本地仓库目录-->
<localRepository>G:\.m2\repository</localRepository>

maven功能总结:

  • maven的核心作用是编译、测试、打包。
  • 根目录下的pom.xml文件设置分组ID与artifactid
  • maven基于约定的方式从项目中获取源码与资源文件进行编译打包。
  • 对于项目所依赖的组件会与本地仓库引用,如果本地仓库不存在则会从中央仓库下载。
maven核心配置
项目依赖
  • 依赖传播特性:我们的项目通常需要依赖第三方组件,而第三方组件又会依赖其它组件遇到这种情况Maven会将依赖网络中的所有节点都会加入到ClassPath当中,这就是Maven的依赖传播特性。
依赖优先原则
  • 基于依赖传播特性,导致整个依赖网络会很复杂,难免会出现相同组件不同版本的情况。Maven此时会基于依赖优先原则选择其中一个版本.
    第一原则:最短路径优先
    第二原则:相同路径下配置再前的优先。(不同路径下配置再后的优先)
可选依赖

可选依赖表示这个依赖不是必须的。通过在中添加true表示,默认是不可选的。可选依赖不会被传递

排除依赖

即排除指定的间接依赖。通过配置配置排除指定组件

依赖范围

像junit 这个组件 我们只有在运行测试用例的时候去要用到,这就没有必要在打包的时候把junit.jar 包过构建进去,可以通过Mave 的依赖范围配置来达到这种目的。maven 总共支持以下四种依赖范围:

  • compile(默认):编译范围,编译和打包都会依赖。
  • provided:提供范围,编译时依赖,但不会打包进去。如:servlet-api.jar
  • runtime:运行时范围,打包是依赖,编译不会。如:mysql-connector-java.jar
  • test:测试范围,编译运行测试用例依赖,不会打包进去。如:junit。jar
  • system:表示由系统中CLASSPATH指定。编译时依赖,不会打包进去。配合一起使用。
    system 除了可以用于引入系统classpath 中包,也可以用于引入系统非maven 收录的第三方Jar,做法是将第三方Jar放置在 项目的 lib 目录下,然后配置 相对路径,但因system 不会打包进去所以需要配合 maven-dependency-plugin 插件配合使用。当然推荐大家还是通过 将第三方Jar手动install 到仓库。
项目聚合与继承
聚合

是指将多个模块整合在一起统一构建,避免一个一个的构建。聚合需要个父工程,然后使用进行配置其中对应的是子工程的相对路径

继承

是指子工程直接继承父工程当中的属性、依赖、插件等配置,避免重复配置。
属性继承、依赖继承、插件继承,以上三个配置子工程都可以重写,重写之后以子工程的为准。

依赖管理

通过继承的特性,子工程是可以通过间接依赖父工程的依赖,但多个子工程依赖有时并不一致,这时就可以在父工程中加入 声明该功程需要的JAR包,然后在子工程中引入。

项目属性

通过 配置 属性参数,可以简化配置。

<!-- 配置proName属性 -->
<properties>
    <proName>ddd</proName>
</properties>
<!-- 引用方式 -->
${proName}
maven 默认的属性
${basedir} 项目根目录  
${version}表示项目版本;  
${project.basedir}同${basedir};  
${project.version}表示项目版本,与${version}相同;  
${project.build.directory} 构建目录,缺省为target  
${project.build.sourceEncoding}表示主源码的编码格式;  
${project.build.sourceDirectory}表示主源码路径;  
${project.build.finalName}表示输出文件名称;  
${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes 
maven插件

开发一个自定义插件步骤:

  • 创建maven插件项目
  • 设定packing为maven-plugin
  • 添加插件依赖
  • 编写插件实现逻辑
  • 打包构建插件
maven私服搭建与核心功能
私服使用场景
  • 公司不能连接公网,可以用一个私服来统一连接。
  • 公司内部jar组件的共享。
nexus仓库介绍
  • 3rd party:第三方仓库、
  • Apache Snapshots:Apache快照仓库
  • Central:maven中央仓库
  • Releases:私有发布版本仓库
  • Snapshots:私有快照版本仓库
  • 发布项目到nexus远程仓库:
    配置仓库地址
    设置setting.xml中server
    执行deploy命令:mvn deploy
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jzs1064

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值