maven的核心概念

一、坐标

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、C
B工程依赖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标签可以排除依赖

三、生命周期

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)validate
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 。
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文件:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值