Maven基础

Maven基础

1 Maven简介

  • 1提供了一套标准化的项目结构(解决了不同IDE不互通的问题)

每一个开发工具(IDE)都有自己不同的项目结构,它们互相之间不通用。

而Maven提供了一套标准化的项目结构,所有的IDE使用Maven构建的项目完全一样,所以IDE创建的Maven项目可以通用。

请添加图片描述

  • 2提供了一套标准化的构建流程(编译,测试,打包,发布……)

    (有自己的插件来实现功能)

请添加图片描述

  • 3提供了一套依赖管理机制

Maven使用标准的坐标配置来管理各种依赖, 只需要简单的配置就可以完成依赖管理:
请添加图片描述

Maven模型

项目对象模型pom (Project Object Model)

依赖管理模型(Dependency)

插件(Plugin)
请添加图片描述

项目对象模型pom就是将我们自己抽象成一个对象模型,有自己专属的坐标,是唯一标识。

项目对象模型pom通过xml格式保存的pom.xml文件。该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。

流程

构建生命周期和插件部分用来完成 标准化构建流程 。

如我们需要编译,Maven提供了一个编译插件供我们使用。我们需要打包,Maven就提供了一个打包插件提供我们使用等。

仓库
Maven用坐标配置管理依赖。

依赖jar包则其实存储在本地仓库中,项目运行时从本地仓库中拿需要的依赖jar包。

  • 本地仓库:自己电脑上存储资源的仓库(是个目录),连接远程仓库获取资源

  • 中央仓库:由Maven团队维护的全球唯一的仓库,Maven团队维护,存储所有资源的仓库

  • 远程仓库(私服):一般由公司团队搭建的私有仓库。部门/公司范围内存储资源的仓库,从中央仓库获取资源

私服的作用:

  • 保存具有版权的资源,包含购买或自主研发的jar。中央仓库中的jar都是开源的,不能存储具有版权的资源
    一定范围内共享资源,仅对内部开放,不对外共享

当项目中使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包:

  • 如果有,则在项目直接引用;
  • 如果没有,则去中央仓库中下载对应的jar包到本地仓库。

如果搭建了远程仓库,将来jar包的查找顺序则变为

本地仓库 --> 远程仓库–> 中央仓库

Maven 坐标

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

  • group Id:公司或组织的 id,即公司或组织域名的倒序,通常也会加上项目名称

例如:group Id :com. javatv. maven

  • artifact Id:一个项目或者是项目中的一个模块的 id,即模块的名称,将来作为 Maven 工程的工程名

例如:artifact Id :auth

  • version:版本号

例如:version:1.0.0

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <!--
      此处为什么需要添加该标签?
      provided指的是在编译和测试过程中有效,在运行时无效,最后生成的war包时不会加入
       因为Tomcat的lib目录中已经有servlet-api这个jar包,如果在生成war包的时候生效就会和Tomcat中的jar包冲突,导致报错
    -->
    <scope>provided</scope>
</dependency>

注意:

上面所说的资源可以是插件、依赖、当前项目。

我们的项目如果被其他的项目依赖时,也是需要坐标来引入的。

配置

根据黑马程序员java Web课程配置

已完成:

  • 本地仓库配置
  • 环境变量配置
  • 阿里云私服连接

2 Maven基本使用

Maven常用命令

  • compile :编译,生成target目录
  • clean:清理,删除target目录
  • test:测试,执行test文件下测试代码
  • package:打包,将当前项目打包成的jar包
  • install:安装,将当前项目打成jar包,并安装到本地仓库

编译命令演示:

shell运行

mvn compile

首次编译会先从阿里云(之前conf/settings.xml配置了阿里云私服)下载编译需要插件的jar包,在本地仓库(之前conf/settings.xml配置了本地仓库位置)也能看到下载好的插件。

清理命令演示:

mvn clean

执行上述命令可以看到

  • 从阿里云下载清理需要的插件jar包
  • 删除项目下的 target 目录

生命周期

Maven 构建项目生命周期描述的是一次构建过程经历经历了多少个事件

Maven 对项目构建的生命周期划分为3套:

  • clean :项目清理的处理,移除所有上一次构建生成的文件。
  • default(或 build) :核心工作,例如编译,测试,打包,安装等。
  • site : 产生报告,发布站点等。这套生命周期一般不会使用。

Clean 生命周期

当我们执行 mvn post-clean 命令时,Maven 调用 clean 生命周期,它包含以下阶段:

  • pre-clean:执行一些需要在clean之前完成的工作
    clean:移除所有上一次构建生成的文件
    post-clean:执行一些需要在clean之后立刻完成的工作

default生命周期

  • 验证 validate 验证项目 验证项目是否正确且所有必须信息是可用的
    编译 compile 执行编译 源代码编译在此阶段完成
    测试 Test 测试 使用适当的单元测试框架(例如JUnit)运行测试。
    包装 package 打包 创建JAR/WAR包如在 pom.xml 中定义提及的包
    检查 verify 检查 对集成测试的结果进行检查,以保证质量达标
    安装 install 安装 安装打包的项目到本地仓库,以供其他项目使用
    部署 deploy 部署 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程
    注意:

打包前先clean是好习惯,能够保证上一次构建的输出不会影响到本次构建。
同一套生命周期内,执行后边的命令,前面的所有命令会自动执行。例如执行安装会先执行打包。

3 IDEA使用Maven

IDEA配置Maven环境

注意:一定要先file-close project关闭项目, 然后再设置,就是全局设置,否则仅本项目内生效。

IDEA 创建 Maven项目

file-new module-选择构建Maven

也可以先创建空项目,在项目内创建Maven模块。

下面生成器Maven archetype(原型)是创建Maven web的

请添加图片描述

填写模块名称,坐标信息,点击finish,创建完成

请添加图片描述

创建好的项目目录结构如下:

请添加图片描述

然后在java文件夹下建包,创建类

导入Maven项目open-双击项目的pom.xml文件即可

pom.xml解释

此阶段packaging不用设置,默认是打包成jar包,以后创建Maven web时候要配置成war。

配置 Maven-Helper 插件

Maven-Helper可以右键Maven项目,直接run Maven和调试。

File --> Settings–Plugins–搜索 Maven,选择第一个 Maven Helper,点击Install安装,弹出面板中点击Accept–重启

4 依赖管理

当 A jar 包用到了 B jar 包中的某些类时,A 就对 B 产生了依赖,那么我们就可以说 A 依赖 B。

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

  • jar 包的下载:使用 Maven 之后,jar 包会从规范的远程仓库下载到本地
  • jar 包之间的依赖:通过依赖的传递性自动完成
  • jar 包之间的冲突:通过对依赖的配置进行调整,让某些 jar 包不会被导入

jar包的导入(pom.xml中修改)

请添加图片描述

请添加图片描述

依赖指当前项目运行所需的jar,一个项目可以设置多个依赖。

  • group Id:依赖所属群组id。
  • artifact Id:依赖所属项目id。
  • version:依赖版本号。
  • scope:依赖生效范围。(也可以不写,问题不大)
  • optional:为true时是可选依赖,指对外隐藏当前所依赖的资源——不透明。设置后其他依赖引用本项目时候将无法看到这个依赖。控制别人能不能看到你用到你。
  • exclusions-exclusion:排除依赖指主动断开依赖的资源,被排除的资源无需指定版本。控制你引用的项目中需要排除的依赖。
    请添加图片描述

依赖具有传递性

直接依赖:在当前项目中通过依赖配置建立的依赖关系

间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源

依赖传递冲突问题

  • 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
  • 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
  • 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的

依赖jar包引用,设置自动刷新
使用坐标引入依赖的jar包

1.在项目的 pom.xml 中编写 标签

2.在 标签中 使用 引入坐标

3.定义坐标的 groupId,artifactId,version

groupId:定义当前Maven项目隶属的实际项目。

例如org.sonatype.nexus,此id前半部分org.sonatype代表此项目隶属的组织或公司,后部分代表项目的名称。

如果此项目多模块话开发的话就子模块可以分为org.sonatype.nexus.plugins和org. sonatype. nexus. utils等。特别注意的是 group Id 不应该对应项目隶属的组织或公司,也就是说group Id不能只有org. sonatype 而没有nexus。

artifact Id:构件ID。该元素定义实际项目中的一个Maven项目或者是子模块,如上面官方约定中所说,构建名称必须小写字母,没有其他的特殊字符,推荐使用“实际项目名称-模块名称”的方式定义,例如:spirng-mvn、spring-core等。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值