1、定义;maven是apache软件基金会下的一款自动化构建工具,专注于服务Java平台上的项目构建和依赖管理。
2、Maven会先搜索本地仓库(repository),发现本地没有然后从远程仓库(中央仓库)获取。但中央仓库只有一个,最好从其镜象处下载。国内用阿里云下的服务器。
也有通过nexus搭建的私服进行获取的(具体参考nexus的创建和连接)。
3、约定的目录结构
maven有三种打包方式:
jar:普通的jar项目
war:创建一个web项目
POM:
创建一个pom文件,管控版本号,其它的maven工程继承后就可以统一控制版本了,如下:
统一的依赖
4.12 4.1.3.RELEASE 3.2.7 1.2.2 junit junit ${junit.version} test org.springframework spring-context ${spring.version} org.springframework spring-beans ${spring.version}
依赖
com.lamsey lamsey-parent 0.0.1-SNAPSHOT lamsey-common
4、依赖:maven解析下述信息时会到本地仓库中根据坐标查找
①依赖信息的配置
com.atguigu.maven Hello 0.0.1-SNAPSHOT compile
坐标::文件发行者信息的倒写
:模块名字
:版本信息
SNAPSHOT:快照RELEASE:正式版
范围::依赖的范围,参数有以下三个 [compile][test][provide]
依赖的进阶:
(1)依赖的传递性:
在依赖的链条上,被依赖的工程如果依赖其他工程,那么链条中上面的工程就不必重复声明依赖了,Maven会自动导入。
(2)依赖传递的限制性 compile范围的引入可以传递 test、provide范围的引入不可传递
对于不可传递的依赖只能在有需要的工程模块中单独引入
(3)依赖传递性的排除 (4)声明属性值 (5)依赖的原则
4、生命周期&&插件
(1)maven中有三个独立的生命周期
[1]Clean:清理[2]Site:生成站点[3]Default:默认
(2)每个生命周期都有这个特点:
不管用户要求执行的命令对应生命周期中的哪一个阶段,Maven都会自动从当前生命周期的最初位置开始执行,直到完成用户下达的指令
以下生命周期&&插件的内容来源:http://www.cnblogs.com/luotaoyeah/p/3819001.html
一个完整的项目构建过程通常包括清理、编译、测试、打包、集成测试、验证、部署等步骤,Maven从中抽取了一套完善的、易扩展的生命周期。Maven的生命周期是抽象的,其中的具体任务都交由插件来完成。Maven为大多数构建任务编写并绑定了默认的插件,如针对编译的插件:maven-compiler-plugin。用户也可自行配置或编写插件。
4.1 . 三套生命周期
clean、default、site,每个生命周期都包含了一些阶段(phase)。三套生命周期相互独立,但各个生命周期中的phase却是有顺序的,且后面的phase依赖于前面的phase。执行某个phase时,其前面的phase会依顺序执行,但不会触发另外两套生命周期中的任何phase。
4.1.1clean生命周期
- pre-clean :执行清理前的工作;
- clean :清理上一次构建生成的所有文件;
- post-clean :执行清理后的工作
4.1.2default生命周期
default生命周期是最核心的,它包含了构建项目时真正需要执行的所有步骤。
- validate
- initialize
- generate-sources
- process-sources
- generate-resources
- process-resources :复制和处理资源文件到target目录,准备打包;
- 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 :将打好的包安装到远程仓库,供其他项目使用;
4.1.3site生命周期
- pre-site
- site :生成项目的站点文档;
- post-site
- site-deploy :发布生成的站点文档
4.2Maven的插件
Maven的核心文件很小,主要的任务都是由插件来完成。定位到:%本地仓库%\org\apache\maven\plugins,可以看到一些下载好的插件:
Maven官网上有更详细的官方插件列表:
4.2.1 插件的目标(Plugin Goals)
一个插件通常可以完成多个任务,每一个任务就叫做插件的一个目标。如执行mvn install命令时,调用的插件和执行的插件目标如下:
每个插件都有哪些个目标,官方文档有更详细的说明::http://maven.apache.org/plugins/index.html
4.2.2将插件绑定到生命周期
Maven的生命周期是抽象的,实际需要插件来完成任务,这一过程是通过将插件的目标(goal)绑定到生命周期的具体阶段(phase)来完成的。如:将maven-compiler-plugin插件的compile目标绑定到default生命周期的compile阶段,完成项目的源代码编译:
4.2.3 内置的绑定
Maven对一些生命周期的阶段(phase)默认绑定了插件目标,因为不同的项目有jar、war、pom等不同的打包方式,因此对应的有不同的绑定关系,其中
针对default生命周期的jar包打包方式的绑定关系如下:
第二列中,冒号后面即是绑定的插件目标,冒号前面是插件的前缀(prefix),是配置和使用插件的一种简化方式。
http://maven.apache.org/guides/introduction/introduction-to-plugin-prefix-mapping.html
clean tomcat7:run
4.2.3自定义绑定
用户可以根据需要将任何插件目标绑定到任何生命周期的阶段,如:将maven-source-plugin的jar-no-fork目标绑定到default生命周期的package阶段,这样,以后在执行mvn package命令打包项目时,在package阶段之后会执行源代码打包,生成如:ehcache-core-2.5.0-sources.jar形式的源码包。
…… org.apache.maven.plugins maven-source-plugin 2.2.1 attach-source package jar-no-fork
4.2.4 配置插件
Maven插件高度易扩展,可以方便的进行自定义配置。如:配置maven-compiler-plugin插件编译源代码的JDK版本为1.7:
org.apache.maven.plugins maven-compiler-plugin
也可以对插件的各个目标进行更具体的配置。
http://maven.apache.org/guides/mini/guide-configuring-plugins.html
4.2.5插件仓库
跟其他构件一样,插件也是根据坐标存储在Maven仓库中。超级POM中Maven配置的默认插件远程仓库如下:
central Central Repository http://repo.maven.apache.org/maven2 default false never
5、继承(不熟)
上一级的maven依赖能被这一级使用
6、连接私服
私服地址
http://localhost:8081/nexus默认账号账号名:admin密码:admin123修改maven的配置文件
central central-mirror http://127.0.0.1:8081/nexus/content/repositories/com.lamsey.com/
7、聚合
:一个项目中的多个工程想要安装到仓库中时,只能一个一个手动安装,比较繁琐,配置聚合之后就能够实现一键安装
com.lamsey lamsey-parent 0.0.1-SNAPSHOT lamsey-manager pom lamsey-manager-pojo lamsey-manager-mapper lamsey-manager-interface lamsey-manager-service
聚合的效果图如下: