Maven基础知识小结。

什么是Maven?

Maven 译 ‘专家,行家’, 是apache下的一个开源项目,相比于SVN(版本控制器)不同,他是一款项目管理工具,Maven也是由java编写,所以同样具有跨平台的特点,当然也就需要有JDK的环境支持.

Maven的作用

  • (1) 进行项目构建
    ①高度自动化,跨平台,标准化的 只有遵守规范才能得到推广
  • (2 依赖jar包管理
    ①开发一款项目不得不依赖第三方的jar包
  • (3) 依赖信息管理
    ①自动生成项目信息

为什么要使用Maven

  • 在原先的项目中,如果需要用到第三方的jar包,必须有开发人员手动去网上下载(这就会导致每个人下载的版本不同,内容也可能不同),然后手动在 复制,粘贴到 WEB-INF/lib 下,而且是每一个项目都需要这样,这样导致带来了:同样的jar出现在不同的工程中,浪费存储空间,工程臃肿,而Maven就可以很好的解决这一问题,通过在pom.xml(POM 项目对象模型,可类比之前学过的DOM对象模型,这里存放工程的核心配置)文件中添加依赖引用仓库中的jar来解决;
  • Maven之所以能够得到推广,就是因为有一套规范,从中央仓库下载到本地仓库的jar都是统一规范的,这样就不会存在项目工程之间jar包冲突的问题。
  • jar包之间的依赖管理会由Maven自动导入,比如 commons-fileupload.jar --> commons-io.jar在导入commons-fileupload.jar时,maven会帮我们自动导入commons-io.jar这个我试的时候只有高版本的jar会自动导入
  • 拥有生命周期核心),简化操作,高度自动化的体现。

Maven仓库

  • 本地仓库
  • 远程仓库
    中央仓库
    镜像仓库
    私服
    大小排序: 中央>镜像>私服>本地
    访问速度排序:本地> 私服> 镜像 >中央
本地仓库位置

默认位置: ~/.m2/repository/
自定义位置:maven的本地仓库配置到指定的路径下,方便管理。在文件conf–>settings.xml 下修改< localRepository >新的仓库路径< /localRepository >

Maven的目录结构

在这里插入图片描述

Maven 的生命周期

Maven有三套相互独立的声明周期
  • Clean LifeCycle
    进行真正构件之前进行一些清理工作
  • Default LifeCycle
    构件的核心部分,编译,测试,打包,部署等等
  • Site LifeCycle
    生成项目报告,站点。
主要说一下Default 生命周期

在这里插入图片描述
其中选中的就是我们经常用到的阶段,下面就以一个例子说明:

用Maven输出HelloWorld!

注意: 执行mvn: 必须在pom.xml所在目录中执行

按照Maven规范目录将HelloWorld.java 和testHelloWprld.java放在正确的文件夹下,然后从Dos命令里面进入Maven项目:
mvn compile --只编译main目录中的java文件 ,编译结束后会生成一个target文件,存 放.class (第一次执行命令时,因为需要下载执行该命令的基础环境,所以会从中央仓库下载该环境到本地仓库,时间很长,耐心等待,不要放弃
compile
mvn test 测试 同样也需要下载各种插件,生成.testClass文件
test
mvn package 打成jar/war前提是:前面的步骤必须是成功的,(生命周期)
package
在这里插入图片描述
在这里插入图片描述
mvn install 将开发的模块 放入本地仓库,供其他模块使用 (放入的位置 是通过gav决定)
package
package
mvn clean 删除target目录(删除编译文件的目录) 该命令既是最后一步,也是第一步。
clean

mvn deploy 该命令是将项目发布到私服上,供所有局域网的人使用,但前提是必须配置好私服,这里就不做展示了。

Maven 命令之所以能运行是因为有下面插件的支持。

在这里插入图片描述

Maven的依赖管理

依赖原则:为了防止冲突

a.路径最短优先原则(很好理解,谁买东西会舍近求远呢?)
b.路径长度相同:
i.在同一个pom.xml文件中有2个相同的依赖(覆盖):后面声明的依赖 会覆盖前面声明的依赖 (严禁使用本情况,严禁在同一个pom中声明两个版本不同的依赖
ii.如果是不同的 pom.xml中有2个相同的依赖(优先):则先声明的依赖 ,会覆盖后声明的依赖

依赖管理的自动导入

在这里插入图片描述在这里插入图片描述
依赖长度相同:
在Maven_HelloTime下查看pom.xml
在这里插入图片描述
在这里插入图片描述
有些人奇怪的是 pom.xml中就没没有依赖junit的jar啊,为什么会导入呢???

这就是依赖传递的范围scope,只有当scope为compile时,传递依赖才会生效

传递依赖

Maven的继承

  • 统一管理版本
  • 消除重复
继承实现步骤:

1.建立父工程: 父工程的打包方式为 pom

2.在父工程的pom.xml中编写依赖:
< dependencyManagement >
< dependencies >
< dependency >
3.子类:

< !-- 给当前工程 继承一个父工程:
1加入父工程坐标gav
2当前工程的Pom.xml到父工程的Pom.xml之间的 相对路径
–>

< parent>
 	  <groupId>org.rjxy.maven</groupId>
	  <artifactId>B</artifactId>
	  <version>0.0.1-SNAPSHOT</version>
	  <relativePath>../B/pom.xml</relativePath>
 </parent>

4.在子类中 需要声明 :使用那些父类的依赖

<!-- 声明:需要使用到父类的junit (只需要ga) -->
 <dependency>
        <groupId>junit</groupId>
	    <artifactId>junit</artifactId>
</dependency>

Maven的聚合

使用聚合的原因

比如 Maven2 依赖于 Maven1,则在执行时:必须先将 Maven1 先加入到本地仓库(install),之后才能执行Maven2,这点不符合Maven高度自动化的特点。
以上 前置工程的install操作,可以交由“聚合” 一次性搞定 一键安装各个模块到本地仓库。。。

聚合的使用

在这里插入图片描述

聚合的配置

聚合的配置 只能配置在(打包方式为pom)的Maven工程中

未完待续 。。。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值