maven的核心概念
2018-03-12 18:03
162 查看
一、坐标
1、坐标的概念
(1)概念:在平面几何中坐标(x,y)可以标识平面中唯一的一点。在maven中坐标就是为了定位一个唯一确定的jar包。
(2)Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范
拥有了统一规范,就可以把查找工作交给机器
2、坐标组成
(1)groupId:定义当前Maven组织名称(2)artifactId:定义实际项目名称
(3)version:定义当前项目的当前版本
二、依赖管理
1、依赖范围
(1)图解:其中依赖范围scope 用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下:
(2)compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
(3)test:测试依赖范围。只对于测试classpath有效
(4)provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
(5)runtime:运行时提供。例如:jdbc驱动
2、依赖传递
(1)A、B、CB工程依赖A工程,C工程依赖B工程 =>那么B工程是C工程的直接依赖,A工程是C工程的间接依赖
(2)分析第一解决依赖和第二直接依赖
(3)依赖范围传递
左边第一列表示第一直接依赖范围
上面第一行表示第二直接依赖范围
中间的交叉单元格表示传递性依赖范围。
(4)总结:
a、当第二依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致。
b、当第二直接依赖的范围是test的时候,依赖不会得以传递。
c、当第二依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依赖的范围同样为 provided;
d、当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递的依赖范围为runtime;
3、依赖冲突
(1)概念:在maven中存在两种冲突方式:一种是跨pom文件的冲突,一致是同一个pom文件中的冲突。
(2)跨pom文件的冲突
a、
MavenFirst的pom文件中依赖来junit的4.9版本,那边MavenSecond和MavenThird中都是使用了4.9版本。
b、如果MavenSecond中重新依赖junit的4.8版本,那么MavenSecond和MavenThird中都是使用了4.8本,这体现来依赖的就近使用原则。
(3)同一个pom文件的冲突
4、可选依赖
(1)Optional标签标示该依赖是否可选,默认是false。可以理解为,如果为true,则表示该依赖不会传递下去,如果为false,则会传递下去。5、排除依赖
(1)Exclusions标签可以排除依赖bfb0
三、生命周期
1、生命周期概述
(1)Maven有三个生命周期:clean生命周期、default生命周期、site生命周期(2)生命周期可以理解为项目构建的步骤集合
(3)生命周期是由多个阶段(Phase)组成。每个阶段都是一个完整的功能,比如mvn clean中的clean就是一个阶段
2、clean生命周期
(1)pre-clean 执行一些需要在clean之前完成的工作
clean 移除所有上一次构建生成的文件
post-clean 执行一些需要在clean之后立刻完成的工作
(2)mvn clean命令,等同于 mvn pre-clean clean。只要执行后面的命令,那么前面的命令都会执行,不需要再重新去输入命令
(3)有Clean生命周期,在生命周期又有clean阶段
3、default生命周期(重点)
(1)validategenerate-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 。
pre-integration-test
integration-test
post-integration-test
verify
install 将包安装至本地仓库,以让其它项目依赖。
deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享
(2)在maven中,只要在同一个生命周期,你执行后面的阶段,那么前面的阶段也会被执行,而且不需要额外去输入前面的阶段,这样大大减轻了程序员的工
4、site生命周期
(1)pre-site 执行一些需要在生成站点文档之前完成的工作(2)site 生成项目的站点文档
(3)post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
(4)site-deploy 将生成的站点文档部署到特定的服务器上
四、插件
1、插件概述
(1)插件(plugin),每个插件都能实现一个阶段的功能。Maven的核心是生命周期,但是生命周期相当于主要指定了maven命令执行的流程顺序,而没有真正实现流程的功能,功能是有插件来实现的(2)比如:compile就是一个插件实现的功能
2、编译插件
(1)图解:3、tomcat插件
(1)如果使用maven的tomcat插件的话,那么本地则不需要安装tomcat(2)使用tomcat插件运行web工程:
a、默认输入tomcat:run去使用tomcat插件来启动web工程,但是默认的tomcat插件使用的tomcat版本是tomcat6
b、而目前主流的tomcat,是使用的tomcat7,需要手动配置tomcat插件
c、使用tomcat7来运行web工程,它的命令是:tomcat7:run
五、继承
1、创建父工程
2、创建子工程
(1)创建子工程有两种方式:一种是创建一个新的工程为子工程,另一种是修改老的工程为子工程(2)图解:
3、父工程统一依赖jar包
(1)在父工程中对jar包进行依赖,在子工程中都会继承此依赖4、父工程统一管理版本号
(1)dependencyManagement标签管理的依赖,其实没有真正依赖,它只是管理依赖的版本(2)子工程的pom文件:
5、父工程抽取版本号
六、聚合
1、创建一个聚合工程
(1)在真实项目中,一个项目有表现层、业务层、持久层,对于业务层和持久层,它们可以在多个工程中被使用,所以一般会将业务层和持久单独创建为java工程,为其他工程依赖(2)图解:
2、创建持久层
3、创建业务层
(1)和持久层的创建一样4、表现层
(1)(2)
5、运行聚合工程
(1)聚合工程的pom文件:相关文章推荐
- Maven核心概念
- Maven学习总结(4)——Maven核心概念
- Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置
- Maven——Maven核心概念
- (七)maven核心概念-Repositories
- Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置
- Maven学习笔记 -- day02 Maven整合struts2及Maven核心概念、添加插件
- Maven学习笔记(二)-Maven中核心概念介绍
- maven用途、核心概念、用法、常用参数和命令、扩展
- 理解maven的核心概念
- Maven学习总结(4)——Maven核心概念
- mavenh核心概念
- Maven学习总结(17)——Maven常用的几个核心概念
- Apache Maven 的核心概念
- Maven核心概念之依赖,聚合与继承
- maven用途、核心概念、用法、常用参数和命令、扩展
- Maven学习总结(4)——Maven核心概念
- maven用途、核心概念、用法、常用参数和命令、扩展
- Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置(转)