Maven——引言与安装、仓库、生命周期、项目指令、项目依赖、继承、聚合和打包、依赖下载失败解决方案
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>
更多推荐



所有评论(0)