Maven——

一、引言与安装

1、为什么需要Maven

在这里插入图片描述

2、Maven解决了哪些问题?

a、添加第三方 jar 包

在这里插入图片描述

b、jar 包之间的依赖关系

在这里插入图片描述

c、处理 jar 包之间的冲突

在这里插入图片描述

d、获取第三方 jar 包

在这里插入图片描述

e、将项目拆分成多个工程模块

在这里插入图片描述

f、实现项目的分布式部署

在这里插入图片描述

3、Maven 安装与配置环境变量

IDEA 上有 maven ,这里就不介绍另外一种下载方式了。

先弄好环境变量,跟 java 是一样的方式(参考 java 的格式):
在这里插入图片描述

弄好以后打开 cmd :
在这里插入图片描述

4、新建一个 Maven 项目

注意,博主的 IDEA 是专业版的,请注意自己的 IDEA 版本:
在这里插入图片描述

然后:
在这里插入图片描述

再然后:
在这里插入图片描述

这里看情况填,version 是版本号的意思,后面的就跟普通创建一个 javaEE 差不多,看情况填就是。

接着创建完毕以后,右下角有个弹框,点击右边那个:
在这里插入图片描述

这个是自动导入的意思,后面导入依赖时,会自动帮我们导入相关的 jar 包。

如果没有点击自动导入,后面每次导入都需要空白处右键,手动刷新导入:
在这里插入图片描述

二、仓库

1、概念

在这里插入图片描述

2、仓库分类

在这里插入图片描述

3、本地仓库

在这里插入图片描述

4、远程仓库

a、中央仓库

在这里插入图片描述

b、公共仓库

在这里插入图片描述

5、私服

在这里插入图片描述

私服的查找顺序:
在这里插入图片描述

6、使用依赖(创建javaEE工程)

去中央仓库搜索相关的依赖,比如 json:
先百度 maven 中央仓库:
在这里插入图片描述

然后进去以后搜索 jackson:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

然后把里面这一段复制,放到 pom.xml 里面去:
在这里插入图片描述

这样一来,就能使用 json 包了。

7、创建一个 web 工程

在这里插入图片描述

前面的 web 项目,都有 web 文件夹以及jsp那些东西,现在就来创建一个 web 项目:

首先,在自己工程文件那里按一下 F4,然后:
在这里插入图片描述
之所以这里有 web 选项,是因为前面加了这一行:
在这里插入图片描述

接着继续:
在这里插入图片描述

点击 ok,然后点 yes,
在这里插入图片描述

接着文件目录就会发现多了个 web-app,接着继续:
在这里插入图片描述

在这里插入图片描述
点击这玩意,然后再最后把刚刚剪切的内容粘贴上去:
在这里插入图片描述

最后看下目录结构:
在这里插入图片描述

三、生命周期

1、scope——写代码时有效,打包时不包装这个 jar 包

在这里插入图片描述

scope:依赖的生命周期:依赖作用的时间范围。

如何验证?
打包之后解压缩文件,查看里面的依赖即可得知。

2、runtime——写代码时不生效,将来项目打包时存在于项目中

在这里插入图片描述
这有个好处就是,写代码时用的是 jdbc 的代码,用的不是 mysql 的代码,如果以后要切换其他数据库,比如 oracle ,就非常方便。

3、test——只能在 test 包下使用,打包时不会打包相关依赖

在这里插入图片描述

4、小结

在这里插入图片描述

四、项目指令

点击 IDEA 最右边的 Maven,可以看到有很多指令,这些指令双击即可运行。
在这里插入图片描述

值得注意的是,并不是点击中间某一个指令就只执行那个指令,而是从上到下依次执行,直到执行完你点击的那个指令为止!

install——安装到本地仓库,安装完后,本地就可以使用该依赖。
其他指令自行百度相关意思。

在这里插入图片描述
点击那个蓝色按钮,这一次执行指令就会跳过测试指令。

五、项目依赖

1、maven 自动解决依赖冲突

MAVEN 会自动帮我们把依赖冲突问题解决,不需要我们在手动解决。

解决的方式:
在这里插入图片描述

依赖树:
在这里插入图片描述

在这里插入图片描述

2、手动解决依赖冲突

当然也可以手动测试,一个个排除依赖冲突:
在这里插入图片描述

然后:
在这里插入图片描述

里面的原本依赖就没了。

六、继承

1、为什么需要继承机制?

由于非compile范围的依赖信息是不能在“依赖链”中传递的,所以有需要的工程只能单独配置。

2、多模块项目

简单的多模块项目:
在这里插入图片描述
这里打包一般打包 web 这个模块

3、继承介绍

这四个模块互相使用,但是打包只能打包一个,能不能打包四个呢?

答案是不行,因为能不能打包取决于有没有 pom.xml 这个文件。

而且很重要的一点就是这样的目录结构不具备依赖的传递性,比如一个模块有A依赖,其他模块也想用这个A依赖,但是只能导入该依赖,如果有很多模块想要用,还是只能自己导入,就非常的麻烦;比如后续的版本升级,也需要一个个改,很不方便;所以这里引入一个继承概念,跟 java 的继承是非常相似的,很容易理解。

4、继承

可以先创建一个大的模块,然后再在里面创建一个个模块:
在这里插入图片描述
这个模块不写代码,一般只用来放依赖,所以这里的 src 目录可以删掉,防止混淆。

接着如果要创建模块,就右键项目,新建模块,跟之前一样的创建步骤(这里就不演示了)。

接着看配置文件,可以发现里面多了一些东西:
在这里插入图片描述
在这里插入图片描述
当父子都有相同的依赖时,优先使用子依赖,相当于重写(覆盖)。

在这里插入图片描述

当父模块中有单元测试这个依赖时,所有子模块都能使用单元测试:
在这里插入图片描述

5、版本更新

在这里插入图片描述
看:
在这里插入图片描述

只有单元测试依赖,没有service依赖。

当声明了这玩意以后,所有子模块与之相同的模块都不需要写版本号了!

在这里插入图片描述
这样以后只需要更新父模块中定义的那个版本号,所有的都会同步更新

6、properties——定义变量

properties 在普通的模块中也可以使用!

在这里插入图片描述

同理,要更改版本号,只需要更改上面的定义的变量的版本号即可,下面的不需要动了。

七、聚合与打包

1、为什么需要聚合?

在这里插入图片描述

2、打包

其实这整一个大模块就是聚合了。

因为这个是一个大模块,有 pom.xml 文件,所以这里可以总的打包。

在这里插入图片描述
打包直接打整个大模块的包即可。
在这里插入图片描述

八、依赖下载失败解决方案

在这里插入图片描述

<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>*</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐