您的位置:首页 > 其它

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

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)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文件:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: