maven简明提要

构建(build)、插件(plugin)、目标(goal)、阶段(phase)、生命周期:

  • 构建(build)是一个动作,这个动作执行一次就是一次构建。一次构建(build)会运行一个或多个目标(goal)。
  • 生命周期、阶段(phase):为了使构建命令更简便,对构建过程做了抽象。将常用的构建的过程抽象出了多个阶段,包括:( pre-clean clean post-clean ) ( … compile … package … install deploy ) ( pre-site site post-site ),然后将常用构建过程中的阶段组织起来定义为一个生命周期。而构建的运行,则是将插件(plugin)中定义的目标(goal),绑定到构建过程的各个阶段。构建执行时会逐步执行这些阶段、执行到哪个阶段就执行绑定到那个阶段的所有的目标、因此实际的执行还是由插件来实现的。
  • 标准生命周期:maven定义了三个标准生命周期,clean default 和 site。
  • clean生命周期,包括 pre-clean clean post-clean 三个有序的阶段,并默认将 插件 org.apache.maven.plugins.maven-clean-plugin.jar 的目标 clean ,绑定到了clean生命周期的clean阶段上。
  • default - 默认生命周期的各个阶段为:compile package install deploy,当执行mvn package命令时,其中的’package’是阶段名称,就会逐步执行默认生命周期从开始一直到package阶段的所有目标。如果执行mvn deploy命令,则会执行default生命周期的所有阶段的目标。

maven的构建(build)命令有两种形式(mvn clean / mvn build / mvn package ):

  • 一种是直接指定运行目标,格式是:mvn goalPrefix:goal,其中goalPrefix是定义在插件plugin的代码中的;如 mvn clean:clean,仅会运行clean插件的clean目标。
  • 一种是指定某个运行阶段,格式是:mvn phase,如mvn clean;会从clean生命周期的第一个阶段开始,逐步运行所有绑定到生命周期阶段中的目标,直至clean阶段。
  • 我们在eclipse等IDE中常见的mvn build命令则是默认的运行deault生命周期。
  • mvn package 是运行default生命周期的第一个至package阶段中的所有阶段。

核心概念:

  • POM / 超级pom
  • coordinates(groupId.artifactId.packaging-version)
  • dependencyManagement
  • dependencies
  • distributionManagement (pom.xml)
  • repositories (settings.xml)
  • pluginRepositories (settins.xml)
  • servers (settings.xml)
  • build 、 plugins 、 goals 、 resources 、 testResources
  • profile 、可移植性 、 mvn package -PprofileId 、<profiles> <profile> <id>production<id>…
  • profiles.xml 、 settings profile 、active-profile plugin ( mvn help : active-profiles )、
  • modules

核心概念详解:

  • 项目对象模型:Project Object Model,即POM。体现为pom.xml,或者pom.yml

  • 坐标:组标识符.构件标识符-版本信息,唯一定义了一个构件。
    体现在pom.xml中即为groupId(组标识符) artifactId(构件标识符) packaging(打包方式) version(版本信息) 标签

  • 约定优于配置:所有可配置项都有默认值,这些默认值即约定。

  • 超级pom:超级pom中声明了所有可配置项的默认值。

  • 构建:一次构建(build)可以是清理前次对项目进行构建后的所有输出(clean),也可以是对项目重新编译、打包、发布这样一个默认的构建(default),也可以是为一个或一组项目生成项目文档和报告(site,即生成一个站点)

  • 阶段-phase:构建过程被抽象为数个有序的阶段(phase)。每个阶段是对功能相对独立的一小段过程的抽象,通用的阶段有:clean的三个阶段(pre-clean clean post-clean), default - 默认的构建过程的阶段有(编译阶段、打包阶段、安装阶段、发布阶段(compile、package、install、deploy)),site 构建过程的三个阶段(pre-site site post-site site-deploy), pre-和post-阶段可以用来注册一些必须在某阶段之前或之后注册的目标。

  • 目标-goal:maven定义了POM来描述项目相关的各种对象,然后定义了目标(goal)去操作这些对象。目标是由插件包装的、会被绑定到构建的生命周期的某个阶段中。maven构建一个项目的时候,实际是一步步通过生命周期的一个个有序的阶段,并运行所有注册到这些阶段的目标。clean(clean:clean)site(site-site:site,site-deploy-site:deploy) default(resources:resources compiler:compile compiler:testCompile test package install:install deploy:deploy)。以compiler:compile为例,compiler是插件目标前缀,即goalPrefix,定义在每个插件的源码中,当需要运行某个插件提供的某个目标的时候,只需用 mvn goalPrefix:goal 的形式来运行,如此,就不必写出长长的插件的全限定名称来。

  • 构建的生命周期:一个构建生命周期是一组精心组织的有序的阶段(phase)。三种标准的生命周期:clean(清理) default(默认) site(站点)。

  • 构建命令(mvn clean / mvn build / mvn package ):两种形式,一种是指定运行目标,如 mvn clean:clean;一种是指定运行阶段,如mvn clean;前者仅仅会运行clean插件的clean目标,后者会从clean生命周期的第一个阶段开始,逐步运行所有绑定到生命周期阶段中的目标,直至clean阶段。而我们在eclipse等IDE中常见的mvn build命令则是默认的运行deault生命周期。mvn package 是运行default生命周期的第一个至package阶段中的所有阶段。

  • 基于mavne插件的全局性重用:maven的核心其实不做什么事情,只是解析一些xml,管理生命周期与插件。其它主要职责都委派给一组maven插件。当第一次运行Maven install或者其它命令的时候,maven从远程仓库下载所需要的插件。当下一次再次运行maven install命令时,如果相关插件有升级,或者你需要新版本中新增的功能,只需修改项目对象模型中关于此插件的版本的描述信息,则maven会自动下载命令相关的最新版本的插件并应用它。如此,升级不需你去对maven做任何动作,就自动完成了。其它插件亦是如此,这就是基于插件的构建逻辑的全局性重用。

  • 依赖管理:由于每个项目都有一个唯一的坐标来定义,因此可以在一个项目的POM中通过坐标来定义对其它项目的依赖。

  • 远程仓库:存放了各种项目的仓库。可以将自己的项目打包发布到仓库中去,也可以从远程仓库下载自己的项目所需要的依赖,这其中,坐标起着关键作用。

  • 插件与构件:构件,是所有通过maven构建出的项目,例如jar包、war包、或者maven-plugin、或者仅仅是一个pom工程。插件,是为maven的功能提供了支持的构件、是构件中的一种,是打包类型为maven-plugin的构件(<packaging>maven-plugin</packageing>);例如在构建过程中,运行生命周期中的各个阶段的目标时,实际就是运行各个插件提供的某个功能。

  • 构件:符合maven约定的项目

  • 插件:maven运行时

mavne的所有功能都是由 插件完成的。
Maven从远程仓库获取依赖和插件的这一事实允许了构建逻辑的全局性重用。

maven是什么

maven是一个项目管理工具,包含一个项目对象模型、一个依赖管理系统、一个项目生命周期、和用来运行定义在声明周期阶段中插件目标的逻辑、一组标准集合。

如何使用?用一个明确定义的项目对象模型(pom.xml)描述项目,然后mavne会基于你在项目对象模型中的定义,来应用横切逻辑,这些逻辑来自插件。

项目对象模型

开发者可以在pom.xml中定义项目的坐标、声明所以依赖的其它项目(通过坐标)、声明从哪里下载依赖(远程仓库)、声明发布到哪里(私服)、配置自定义的插件和(或)目标(不适用默认的约定的配置项)

功能:项目构建、依赖管理、

项目构建:plugin完成,将plugin绑定到生命周期的某个阶段phase,构建时,指定要运行的生命周期,即按照阶段顺序调用plugin

依赖管理:在maven中所有构件都有一套坐标,用来唯一确定构件的位置:groupId\artifactId\version\packaging\classifier。
依赖信息还要包括type、scope、optional、exclusions。
依赖冲突时,默认是最短路径优先+最先声明优先,但可以用exclusions来自定义解决依赖冲突问题。

**仓库:**配置在settings文件的下,指定id\name\url\snapshots(是否下载snapshot版本的构件)

仓库的镜像:配置在setttings文件的mirrors元素下,指定id\name\url\mirrorOf

自己的仓库:nexus私服:(当公司中项目较多时,可以自己搭建一个maven仓库,将自己项目的包放到私服上去,同时私服会先将公司项目中用到的组件下载到私服本地,新员工入职时,直接从本地下载组件,速度快):
私服
Nexus 的仓库分为这么几类:

  • hosted 宿主仓库:主要用于部署无法从公共仓库获取的构件(如 oracle 的 JDBC 驱动)以及自己或第三方的项目构件;
  • proxy 代理仓库:代理公共的远程仓库;
  • virtual 虚拟仓库:用于适配 Maven 1;
  • group 仓库组:Nexus 通过仓库组的概念统一管理多个仓库,这样我们在项目中直接请求仓库组即可请求到仓库组管理的多个仓库

私服上默认有三个用户:admin\deployment\anonymous,其中deployment用户是用于员工将公司内部项目组件发布到私服上设置的用户。确保此用户状态为active

设置下载远程仓库的索引:在私服中,对于proxy代理仓库,设置允许下载其代理的远程仓库的索引,这样当我们需要依赖某个组件时,就可以直接在私服上搜索此组件,而不是去远程仓库速度比较慢。

将私服设置为所有远程仓库的mirror:员工自己本地settings文件中,首先设置私服的repository,然后将私服设置为为所有远程仓库的mirror。

发布组件到私服

  • 首先员工要在本地settings.xml文件中设置distributionManagement元素,设置组件要发布到哪里id、name、url。
  • 其次在settings.xml中设置元素server,设置id(distributionManagement元素的id)、username(私服用户deployment)、password(私服用户deployment的密码)

生命周期:maven有三套生命周期,clean,default,
default生命周期有23个phase阶段,按顺序执行,命令行构建时,可以指定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值