Maven的原理、流程、scope作用域、生命周期、项目之间的关系,依赖,继承,聚合

30 篇文章 0 订阅
17 篇文章 0 订阅

1.maven的概念:

Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶(phase)中插件(plugin)目标(goal)的逻辑。

2.maven的优点:

  1. 简化了项目依赖管理:jar包管理,防止了冲突

  2. 便于与持续集成工具(jenkins)整合

  3. 便于项目升级,无论是项目本身升级还是项目使用的依赖升级。

  4. 有助于多模块项目的开发,一个模块开发好后,发布到仓库,依赖该模块时可以直接从仓库更

新,而不用自己去编译。

  1. maven有很多插件,便于功能扩展,比如生产站点,自动发布版本等

3.原理图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8WhldcWE-1600607836503)(E:\有道云图片\qq433A8C57C88B51E6DF4A4B18D16012EA\9a095e6d90a242b9906ff746a703308c\clipboard.png)]

a) 中央仓库(Central Repository), 官方维护, 存放所有相关的jar包(包含各个版本)

b) 本地仓库(Local Repository), maven项目都是从本地仓库加载jar包的.

c) 镜像仓库(Mirror Repository), 国内有能力的组织(机构)搭建的仓库, 这个仓库就是将中央仓库中的所有内容复制了一份存起来.

l jar包的定位: 坐标, 三部分构成

Ø GroupId: 一般是逆向公司域名 com.bjsxt

Ø ArtifactId: 一般是项目(jar)名 mybatis-3.5.2

Ø Version: 版本号 3.5.2

4.Maven的安装和配置流程

安装

将maven的压缩包解压到指定的文件夹中

配置maven的本地仓库

配置

​ 在maven的目录中的conf文件中的setting.xml

① 本地仓库的路径,在pluginGroups标签上

② 镜像仓库,在mirrors标签下

③ 配置jdk的版本,在Profiles标签下

5.Maven中jar类型项目的结构和特点

① jar类型项目的结构

② jar类型项目的特点

i. jar类型的项目,相当于我们以前的JAVASE项目。

ii. jar项目编译后的项目结构体系和原有的JAVASE项目编译后的结构体系相 同

iii. 默认在test目录下的测试代码是不会编译到项目中的。

6.Maven中war类型项目的结构配置

① 在war项目下的src下的main目录下手动创建java和resources目录。

java目录作为java源码存方法目录

resources目录作为配置文件目录

② 将创建的java目录设置为源码目录

③ 将resources目录设置为配置文件存储目录

\1. war类型项目结构的作用

4.war类项目项目的特点

​ i. 相当于我们以前的JAVAEE项目,完成web项目的开发。

​ ii. 项目最终打成的在Tomcat中运行的war包和原有的JAVAEE项目的结构体系完全相同

7.Maven项目中pom配置文件的使用

pom(Project Object Model)文件的作用

用来声明当前项目自己的资源坐标以及要使用的其他资源的资 源坐标等,由

maven 工具自动的根据该文件的变化来管理项目中 的资源。

pom文件的配置内容

1、modelverson:声明模块的版本

2、当前项目的资源坐标:给maven查看 ,并便于maven查找到该项目给其他项目使用

3、配置第三方的资源坐标:让maven根据坐标从本地仓库中引入第三方的资源到项目

中使用,如果本地仓库中没有,则会自动从云仓库中下载

8.Maven中的scope作用域

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M0VCrHBl-1600607836527)(E:\有道云图片\qq433A8C57C88B51E6DF4A4B18D16012EA\41b2361c81154a15871308ba2f4eba10\clipboard.png)]

compile:编译范围,指 A 在编译时依赖 B,此范围为默认依赖范围。编译范围的依赖会用在 编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。

provided:provided 依赖只有在当 JDK 或者一个容器已提供该依赖之后才使用provided 依 赖在编译和测试时需要,在运行时不需要,比如:servlet api/jsp-api 被 tomcat 容器提供。

runtime:runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc 的驱动包。由于运行时需要所以 runtime 范围的依赖会被打包。

test:test 范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用, 比如:junit。由于运行时不需要所以 test范围依赖不会被打包。

​ system:system 范围依赖与 provided 类似,但是你必须显式的提供一个对于本地系统中 JAR 文件的路径,需要指定 systemPath 磁盘路径,system依赖不推荐使用

9.Maven指令的生命周期

maven指令的生命周期

Clean Lifecycle 在进行真正的构建之前进行一些清理工作。

Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。

Site Lifecycle 生成项目报告,站点,发布站点。

常用指令

clean:清除maven项目下的target目录中的class和本地仓库中已打包的文件。

validate:验证工程是否正确,所有需要的资源是否可用。

compile:即编译项目中的java文件,并存放在项目的编译目录。

test: 即运行项目中的测试用例文件,如果测试用例未通过,也会打包失败,这里test过程可以在pom中通过配置跳过。

package:将本地编译好的文件打包为war 或者jar。

verify: 运行任何检查,验证包是否有效且达到质量标准。

install:将打包的代码存放到本地maven仓库,可供本地其它项目依赖使用。

site:生成项目报告,站点,发布站点。

deploy:将打包在本地仓库中的项目发布到服务器,供他人依赖使用

10.Maven项目之间的关系

依赖

假设两个工程A和B, A当前需要使用B的功能, 我们就说A依赖B. 依赖关系是一个比较简单的关系. 依赖关系只需要通过在pom文件中指定坐标即可实现.

继承

假设两个工程A和B, B工程是在A工程基础上做的扩展. 此时, B工程继承了A工程. 继承是比依赖更紧密的一种关系. 要求父工程必须是一个pom工程. 在继承关系中, 子工程明确父工程, 但是父工程不明确子工程.

聚合(重点)

多个Model共同组成一个Project. 对外看起来是一个工程. 必须先由继承关系. 在聚合工程中, 是一个双向的关系.

11.Maven项目之间的依赖关系

Maven项目依赖关系的使用

① 创建项目A完成功能开发

② 在项目A的pom文件中配置项目B或者其他第三方资源的资源坐标

③ 在项目A中正常调用项目B的资源即可。

依赖原则

路径不同间接依赖中maven采用的是路径最短者优先

路径相同间接依赖中maven 采用的是依赖定义顺序从上到下

注意

在开发阶段,并且在同一个工作空间,不同的maven项目之间可以通过资源坐标直接调

用其资源,无需将其打包放到本地仓库中。但是在项目运行期间,必须根据依赖关系的

顺序依次打包,才能正常运行。比如A–>B—>C—>D打包的顺序为先打包D再打包C再

打包B再打包A。最简单的记忆方法,就是不管是开发阶段还是运行阶段只要项目A依赖

的其他项目都需要进行打包,其他项目每修改依次就重新打包一次。

12.Maven项目之间的继承关系

注意:

java基本语法中的继承是继承理论的一种应用,父项目一定是pom类型的。

pom类型的项目只做资源管理,不做功能开发。在继承关系中父项目创建 为pom类

型比较合理。

pom类型项目的创建

先创建一个jar类型的项目,然后将目录结构删除,只保留pom文件

然后在pom文件中使用packaging标签修改项目的类型为pom类型

(1) maven项目的继承关系中的父项目要创建为pom类型

(2) 继承关系中的maven项目是相互独立的,本质就是两个项目

13.maven项目的聚合关系

聚合关系:

将本来一个整体的事物,拆分为不同的零件。每个零件在物理视图上是独立的,也就说肉眼

看到的是多个零件。但是在逻辑上这些零件是属于一个个体的。这些零件之间的关系就是聚

合关系。

继承和聚合之间区别

两者的目的是不一样的,聚合的目的是一个项目的拆分,继承的目的是不同的项目减少重复

配置。

14.使用maven将项目部署到其他服务器中运行

手动部署

① 使用maven将项目整体打包到本地仓库中

② 在idea中找到war类型的web项目将其target文件夹

下的war包上传到其他的tomcat中,然后启动其他的tomcat

③ 在本地的浏览器中访问另一个中的web项目

注意:访问项目的虚拟项目的名字为tomcat下的war包解压后的文件夹的名字

远程部署:

\1. 启动tomcat服务器

\2. 访问tomcat服务器的首页(广告页,项目A)

tomcat自带的ROOT项目,是tomcat自带的一个web项目。

我们可以通过浏览器访问,然后在浏览器中管理tomcat中的项目资源。

\3. 点击tomcat首页的manager app

当我们点击manager APP时,会先提示我们进行登录,在登录页面中输入

账号和密码即可进入到项目资源管理页面。我们点击取消,进入登录用户

配置提示页面,在该页面中,tomcat提示我们需要在tomcat-user.xml

文件中去配置我们的账户信息。

\4. 在tomcat-user.xml中配置账户信息

\5. 登录ROOT项目,使用manager APP功能管理tomcat中的项目资源

② maven远程上传war项目的配置和使用

\1. 在war项目中的pom文件中配置项目远程部署的参数信息
在这里插入图片描述

\2. 启动远程部署

\3. 在本地的浏览器中访问tomcat中的项目即可

注意:

在使用maven远程部署项目时,一定要确保远程端tomcat是开启的。tomcat:run命令是本地运行项目。

15.总结

\1. maven的使用

管理项目中的资源,使用maven创建项目完成功能开发。

2.maven的jar类型项目的使用流程

① 创建maven项目,类型为jar

② 在java目录下声明源码完成功能开发

③ 在pom.xml文件中配置需要使用的第三方资源

3.maven的war类型项目的使用流程

① 创建maven项目, 类型为war

② 完善war项目的目录结构,创建java和resources目录

③ 在pom.xml文件中配置web开发的依赖资源

servlet的依赖,jsp的依赖,jstl的依赖,tomcat的插件

④ 在java目录下声明代码完成功能开发

⑤ 在web目录下声明页面资源

4.maven使用聚合关系拆分使用流程

① 创建一个pom类型的项目,管理拆分后的项目所有的资源

② 选中pom项目右键连续创建四个子moudle

pojo:jar类型

mapper:jar类型

service:jar类型

web:war类型

③ 配置父项目中的pom文件,配置SSM开发相关的资源

④ 配置pojo子项目中的pom文件

⑤ 配置mapper子项目中的pom文件(依赖pojo)

⑥ 配置service子项目的pom文件(依赖mapper)

⑦ 配置web子项目的pom文件以及目录结构(依赖service)。

⑧ 在web子项目中的resources目录下配置SSM的配置文件

⑨ 完成功能开发

⑩ 在父项目中对整个项目资源进行clean和install,然后再war项目中

使用指令完成项目的运行或者远程部署

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jP4edGLk-1600607836536)(E:\有道云图片\qq433A8C57C88B51E6DF4A4B18D16012EA\fb1a33805043402ca14f98df75eb2cac\clipboard.png)]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值