初识Maven

介绍:

web后端开发技术

ApacheMaven是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建。

安装:http://maven.apache.org/

Apache软件基金会,成立于1999年7月,是目前世界上最大的最受欢迎的开源软件基金会,也是一个专门为支持开源项目而生的非盈利性组织。

开源项目:https://www.apache.org/index.html#projects-list


Maven的作用?

  1. 依赖管理:可以快捷的管理jar包,
  2. 统一项目结构:使得同一个java项目,可以在不同的平台迁移,
  1. 项目构建:

概述:

Maven坐标

  • 什么是坐标?
    • Maven中的坐标是资源的唯一标识,通过改坐标可以唯一定位资源位置
    • 可以使用坐标来定义项目或引入项目中所需要的依赖
  • 坐标组成
    • groupld:定义当前Maven项自隶属组织名称
    • artifactld:定义当前Maven项目名称(通常是模块)
    • version:定义当前项自版本号


Maven模型

  • 项目对象模型 (Project Object Model)
  • 依赖管理模型(Dependency)
  • 构建生命周期/阶段(Build lifecycle & phases)

1). 构建生命周期/阶段(Build lifecycle & phases)

以上图中紫色框起来的部分,就是用来完成标准化构建流程 。当我们需要编译,Maven提供了一个编译插件供我们使用;当我们需要打包,Maven就提供了一个打包插件供我们使用等。

2). 项目对象模型 (Project Object Model)

以上图中紫色框起来的部分属于项目对象模型,就是将我们自己的项目抽象成一个对象模型,有自己专属的坐标,如下图所示是一个Maven项目:

这里还未添加依赖,

添加后如图:

3). 依赖管理模型(Dependency)

以上图中紫色框起来的部分属于依赖管理模型,是使用坐标来描述当前项目依赖哪些第三方jar包:

如图:

之前我们项目中需要jar包时,直接就把jar包复制到项目下的lib目录,而现在书写在pom.xml文件中的坐标又是怎么能找到所要的jar包文件的呢?

Maven有一个仓库,专门存放jar包,不需手动导入了


Maven仓库

仓库:用于存储资源,管理各种jar包

仓库分类:

本地仓库:自己计算机上的一个目录

中央仓库:由Maven团队维护的全球唯一的。仓库地址:仓库 Maven仓库

远程仓库(私服):一般由公司团队搭建的私有仓库

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

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

如果还可以搭建远程仓库(私服),将来jar包的查找顺序则变为: 本地仓库 --> 远程仓库--> 中央仓库

IDEA集成Maven

  • 配置Maven环境
  • 创建Maven项目
  • 导入Maven项目

见资料,

依赖管理:

依赖配置

依赖:指当前项目运行所需要的jar包,一个项目中可以引入多个依赖

配置:

  1. 在pom.xml 中编写标签
  2. 在标签中使用引入坐标
  3. 定义坐标的grould,artifactId,version
  4. 点击刷新按纽,引入最新加入的坐标

配置完记得刷新一下

如果引入的依赖,在本地仓库不存在,将会连接远程仓库/中央仓库,然后下载依赖

如果不知道依赖的坐标信息,可以到Maven仓库中搜索。

依赖传递

早期我们没有使用maven时,向项目中添加依赖的jar包,需要把当前jar包的依赖都复制到项目工程下。非常麻烦

但是有了maven,它有依赖传递的特性:

  • 依赖具有传递性
    • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
    • 简洁依赖:被依赖的资源如果依赖其他资源,则当前项目间接依赖其他资源

排除依赖:

排除依赖指主动断开依赖的资源,被排除的找资源无序指定版本

排除后:

依赖范围

依赖的jar包,默认情况下,可以下任何地方使用。可以使用...设置其作用范围

作用范围的分类:

  • 主程序范围有效(main文件夹内)
  • 测试程序范围有效。(test文件夹范围内)
  • 是否参与打包运行。(package)

scope值:

compile:

main中:可调用jar包中的内容

Test中:可调用jar包中的内容

Test:只能在测试程序范围有效

其他范围一样...

生命周期

Maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统一。

Maven中有三套相互独立的生命周期:

  • clearn:清理工作
  • default:核心工作,如:编译、测试、打包、安排、部署等。
  • site:生成报告、发布战点等。


重点掌握:

test测试时我们依赖junit来测试

在同一套生命周期中,当运行后面的阶段时,前面的阶段都会运行。

如执行install时也会执行compile、test...

执行生命周期:

方式一:在idea中右侧的maven工具栏,选择

方式二:通过命令行执行

演示:

compile

test:

package

install

clean:

方式二:

进入模块

打开cmd

package:

但是有报错问题

![57KaTeX parse error: Expected 'EOF', got '}' at position 8: GZC0W95}̲Y[0N]R)]E3G.png](https://img-blog.csdnimg.cn/img_convert/49a41c6e87a7be8309a0c11a2ef9750b.png)

之前导入的maven模块,也无法执行生命周期,考虑是groupId的问题

相关推荐
考虑考虑44 分钟前
JDK9中的dropWhile
java·后端·java ee
想躺平的咸鱼干1 小时前
Volatile解决指令重排和单例模式
java·开发语言·单例模式·线程·并发编程
hqxstudying1 小时前
java依赖注入方法
java·spring·log4j·ioc·依赖
·云扬·1 小时前
【Java源码阅读系列37】深度解读Java BufferedReader 源码
java·开发语言
Bug退退退1233 小时前
RabbitMQ 高级特性之重试机制
java·分布式·spring·rabbitmq
小皮侠3 小时前
nginx的使用
java·运维·服务器·前端·git·nginx·github
Zz_waiting.3 小时前
Javaweb - 10.4 ServletConfig 和 ServletContext
java·开发语言·前端·servlet·servletconfig·servletcontext·域对象
全栈凯哥3 小时前
02.SpringBoot常用Utils工具类详解
java·spring boot·后端
兮动人3 小时前
获取终端外网IP地址
java·网络·网络协议·tcp/ip·获取终端外网ip地址
呆呆的小鳄鱼3 小时前
cin,cin.get()等异同点[面试题系列]
java·算法·面试