Maven入门

目录

1.为什么要学习Maven

1. 作为jar包的管理工具

2.作为构建管理工具

3.结论

2.什么是Maven

1. 构建包含的主要环节

2.依赖

3.Maven的工作机制

3.Maven的核心概念:

1.坐标

2.POM

3.约定的目录结构

4.生命周期

5.插件与目标

6.仓库

4.Maven操作

5.依赖

1.依赖的范围

2.依赖的传递

3.依赖的排除

6.继承

7.聚合

8.使用idea操作Maven


1.为什么要学习Maven

1. 作为jar包的管理工具

* 项目中用到的jar包数量越来越大,比如使用框架中的三个功能,就需要导入106个jar包;使用Maven则只需要导入三个依赖而已

* jar包的来源十分难找,找到的也不一定能用;使用Maven后,依赖对应的jar包能够自动下载,方便且规范

* 框架中的jar包数量庞大,且具有复杂的依赖关系,彼此盘根错节,在使用中难度很大。使用Maven可以很好的管理jar包

2.作为构建管理工具

* 在使用java/web源程序(比如java的类)时,都需要将源程序加载、打包、部署,这就是构建。使用IDEA开发时,构建由IDEA生成

* 将代码写好要上传到服务器中,需要将代码集成、打成war包、部署,此时IDEA无法替我们构建,Maven可以

3.结论

* 管理规模庞大的jar包,需要专门工具

* 脱离IDE环境执行构建操作,需要工具

2.什么是Maven

1. 构建包含的主要环节

* 清理:删除上一次构建的结果,为下一次构建做好准备

* 编译:Java源程序编译成*.class字节码文件

* 测试:运行提前准备好的测试程序

* 报告:针对刚才测试的结果生成一个全面的信息

* 打包:Java工程:jar包;Web工程:war包

* 安装:把一个Maven工程经过打包操作生成的jar包或war包存入到Maven仓库

* 部署:部署jar包:把一个jar包部署到Nexus私服服务器上;

             部署war包:借助相关Maven插件(例如cargo),将war部署到Tomcat服务器上

2.依赖

* 如果A工程里面用到了B工程的类、接口、配置文件等等这样的资源,那么我们就可以说A依赖B

- 依赖中要解决的具体问题:

* jar包的下载:使用Maven之后,jar包会从规范的远程仓库下载到本地

* jar包之间的依赖:通过依赖的传递性自动完成

* jar包之间的冲突:通过对依赖的配置进行调整,让某些jar包不会被导入

3.Maven的工作机制

Maven入门_第1张图片

3.Maven的核心概念:

1.坐标

坐标:使用三个向量在Maven仓库中唯一的定位到一个jar包

* groupId:公司或组织的ID

* artifactId:一个项目或者是项目中的一个模块的ID

* version:版本号

* 一个项目,可能有很多模块,因此存在很多个工程

比如:

groupId:com.gz.maven
artifactId:pro01-gz-maven
version:1.0-SNAPSHOT

2.POM

* POM:project object model-项目对象模型

* 模型化思想:将工程抽象成一个模型,再用程序中的对象来描述这个模型;就是将现实生活中的事物抽象成模型,然后封装模型相关的数据作为一个对象。比如:地球-地球仪

* 对应的配置文件:POM理念体现在Maven根目录下pom.xml文件中。学习Maven就是学习如何配置pom.xml文件

3.约定的目录结构

* 约定目录结构的意义:Maven为了让构建过程尽可能自动化完成,必须约定目录结构的作用

* 约定大于配置,配置大于编码:Maven对于目录结构,是基于约定的,使得开发非常方便

4.生命周期

* Maven包中的Lifecycle既是生命周期

* 作用:让构建过程自动化完成,Maven设定了三个生命周期,生命周期中的每一个环节对应构建过程中的一个操作

* 简单的说:在生命周期的任一个环节执行都会从头开始执行

* 三个生命周期:

        1. Clean:清理操作相关

        2. Site:生成站点相关:将Maven项目的依赖等各种信息抽取出来,生成一组静态页面-站点

        3. Default:主要构建过程

* deploy-部署:将包复制到远程的仓库,以让其他开发人员与项目共享;或部署到服务器上运行(借助插件,如cargo)

5.插件与目标

* 插件:Maven的核心程序仅仅负责宏观调度,不做具体工作。具体工作由Maven插件完成

* 目标:一个插件可以对应多个目标,每一个目标都个生命周期的某一个环节对应

6.仓库

* 本地仓库:在当前电脑上,为电脑所有工程服务

- 远程仓库:需要联网

* 局域网:我们自己搭建的Maven私服,比如使用Nexus技术搭建私服

* nezus相当于是一个中转站,当需要的jar包本地没有时,会先去Nexus私服看有没有,私服没有就由私服去中央仓库下载jar包,然后本地再从私服中下载

* internet-外网:中央仓库/镜像仓库

* 建议不要中央仓库和阿里云镜像混用,否则jar包来源不纯,彼此冲突

4.Maven操作

* 使用命令生成Maven工程:运行 mvn archetype:generate命令

Maven入门_第2张图片

* 使用命令行执行Maven命令时,要在pom.xml所在目录下运行—操作哪个工程,就进入这个工程的pom.xml目录

* 清理:mvn clean

* 编译:主程序编译:mvn compile;测试程序编译:mvn test-compile;主体程序编译结果存放目录:target/classes测试程序编译结果存放目录:target/test-classes

* 测试:mvn test;测试报告存放目录:target/surefire-reports

* 打包:mvn package;打包为jar包,存放目录:target

* 安装:mvn install

* 只有web工程依赖java工程,没有java工程依赖web工程

5.依赖

1.依赖的范围

* 部署到服务器:就是打包的过程中

* compile、test、provided都是scope中的范围;该写一定要写,不然易引起冲突(比如服务器中有一个jar包,你不应该部署到服务器中,此时scope为provided,但你使用了compile,就会报错)

* 但这些scope一般复制过来时都已经有了,不要删掉就行

Maven入门_第3张图片

2.依赖的传递

* A依赖B,B依赖C,在A没有配置对C的依赖时,A能否使用C的依赖,取决于B依赖C的依赖范围

* B依赖C使用compile范围时,可以传递

* B依赖C使用test/provided时:不能传递,因此需要这样的jar包时,必须在需要的地方明确配置依赖才可以

3.依赖的排除

* 即阻断依赖的传递;避免出现jar包之间的冲突(传递时导入同一个jar包的不同版本)

* 排除方式:exclusions-排除

Maven入门_第4张图片

6.继承

* 含义:A工程的pom.xml中的配置继承了B工程中pom.xml的配置;B即为父工程

* 作用:可以统一管理项目的依赖信息,具体来说是管理依赖信息的版本,保持版本一致

* 只有打包方式为pom的Maven工程能够管理其他Maven工程。即作为父类

* 打包方式为pom的Maven工程不写业务代码,是专门管理其他Maven工程的工程

Maven入门_第5张图片

* 子工程的groupId和version如果和父工程一样,则可以省略,只保留artifactId

* 在父工程中统一管理依赖信息

* 注意:即使在父工程配置了对依赖的管理,子工程需要使用具体哪一个依赖还是要明确配置,只是不需要写版本号

* 想要一处修改,处处生效,可以在properties里面配置自定义的属性标签

Maven入门_第6张图片Maven入门_第7张图片Maven入门_第8张图片

7.聚合

* 即部分组成整体

* 项目:整体;模块:部分

* 从聚合关系来讲:总工程、模块工程

* 先安装父工程,然后按照被依赖工程,最后安装本工程

* 要避免依赖循环问题

8.使用idea操作Maven

* 重中之重:idea版本要和Maven匹配,比如idea2019只能匹配maven3.6以下的

1.Maven home directory:下载的Maven压缩包位置

   User settings file:下载的Maven压缩包中setting.xml文件位置,在conf下

   Local repository:自己在电脑中设置的本地仓库

Maven入门_第9张图片

 2.在IDEA的右侧是Maven的快捷操作界面

        Lifecycle:表示生命周期中的各个操作,比如点击clean相当于:清理-mvn clean

        Pugins:表示各种插件

        Dependencies:已经导入的依赖

Maven入门_第10张图片

你可能感兴趣的:(spring框架,maven,java,tomcat)