Maven:Maven基础

news2024/11/24 4:20:45

Maven

apache旗下的一个开源项目,一款用于管理和构建java项目的工具

什么是Maven

一个项目管理和构建工具,基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建,报告和文档.

Maven的作用

依赖管理

方便快捷的管理项目依赖的资源jar包,避免版本冲突问题

统一项目结构

提供标准,统一的项目结构.

无论什么编译环境,都可以自动生成一个统一标准的项目目录结构.

请添加图片描述

项目构建

基于项目对象模型(POM)

提供了标准的,跨平台的自动化项目构建方式

提供了一套简单的命令来完成项目构建.

Maven模型

项目管理模型

依赖管理模型

插件

请添加图片描述

这部分提供插件完成了标准化的构建流程.

请添加图片描述

这部分将项目抽象成了一个对象模型

依赖管理模型使用对象模型的坐标来描述项目依赖于哪些第三方jar包

Maven仓库

依赖jar包的存储位置,项目运行时从本地仓库中拿取jar包

请添加图片描述

仓库的分类

本地仓库:

自己计算机上的一个目录

远程仓库(私服):

一般由公司团队搭建的私有仓库

当项目中使用坐标引入对应依赖jar包后

会先查找本地仓库是否有对应jar包

如果有:直接引用

如果没有:去中央仓库下载对应jar包到本地

还可以搭建远程仓库

则查找顺序变为:

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

IDEA集成Maven

Maven项目的目录结构

maven-project01
|- src (源代码目录和测试代码目录)
|- main (源代码目录)
|- java (源代码java文件目录)
|- resources (源代码配置文件目录)
|- test (测试代码目录)
|- java (测试代码java目录)
|- resources (测试代码配置文件目录)
|- target (编译、打包生成文件存放目录)

Maven坐标详解

资源的唯一标识,通过坐标可以唯一定位资源位置

使用坐标可以定义或引入项目中需要的依赖

maven坐标的组成

groupId:

定义当前maven项目隶属组织的名称

(通常为域名反写)

artifactId:

定义当前项目名称

(通常为模块名称)

version:

定义当前项目的版本号

Maven项目的导入

引入pom.xml文件

依赖管理

依赖配置

<dependecies>
    <dependecy>
        <groupId></groupId>
        <artifactId></artifactId>
	</dependecy>
</dependecies>

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

在pom.xml文件中引入当前依赖

1,pom.xml中编写标签

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

3,定义坐标的参数

依赖传递

依赖具有传递性

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

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

依赖的优先级

路径优先:依赖中出现相同资源,层级越深,优先级越低

声明优先:当资源在相同层级被依赖时,配置顺序靠前的优先级更高

特殊优先:当同一级配置了相同资源的不同版本,后配置的覆盖先配置的.

可选依赖

不会默认被继承子项目的项目依赖

通过

<optional>true</optional>

指定当前依赖是否可选

排除依赖

通过

<exclusion></exclusion>

主动断开依赖资源

依赖范围

默认可以在任何地方使用

可以通过

<scope>compile</scope>
<scope>test</scope>//测试范围内生效不参与打包
<scope>provided</scope>//不参与打包
<scope>runtime</scope>//不参与主程序

设置范围

Maven生命周期

主要分为三部分

每次执行生命周期会执行对应部分且在该生命周期之前的全部生命周期.

clean:清理工作

eg:

clean

移除上一次构建生成的文件

default:核心工作

eg:

Compile

编译项目源代码

Test

使用单元测试框架运行测试,(可以一键略过)

运行所有以Test结尾的测试类
package

打包编译好的文件

运行插件打包成jar包到target文件夹
install

安装项目到本地仓库

site:生成报告,发布站点等

生命周期可以在idea中直接双击执行,或者使用命令行执行

插件

maven本质上是一个插件执行框架,所以工作都基于插件执行.

默认maven在各个生命周期上都绑定有预设的插件,在执行到对应生命周期时执行对应插件功能.

分模块设计

在大型项目开发时,通常会将原始模块按照功能拆分为若干子模块方便项目的管理维护和拓展以及模块间的相互调用和资源共享.

对封装的公共组件进行使用:

1,直接依赖项目:

全部依赖存在性能问题

公开业务代码非常不安全

2,分模块设计

先设计模块,再进行编码.按功能将类抽取到模块中

继承和聚合

继承描述了两个工程之间的关系,与java继承类似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承.

作用:

简化依赖配置

统一管理依赖

实现
先创建父工程
在子工程的pom.xml文件中配置继承关系

注:

groupid可以省略,自动继承父工程

relativepath指定父工程的pom文件位置

在父工程中配置所有子工程需要的依赖

子工程如果配置了和父工程一样的依赖,会使用子工程自己的依赖

版本锁定

多个模块使用同一个依赖,可以使用版本锁定统一管理依赖版本,同时升级版本.

在父工程的pom中配置

<dependencyManagement>
	<dependencies>
 		<dependency>
		<groupId>org.apache.commons</groupId>
		<artifactId>commons-lang3</artifactId>
		<version>3.11</version>
		</dependency>
	</dependencies>
</dependencyManagement>

子工程依赖配置

<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-lang3</artifactId>
</dependency>

属性配置

可以在文件固定位置统一管理配置父工程属性

聚合

将多个模块组织成一个整体,同时进行项目构建.

聚合工程

一个不具有业务功能的空文件(仅有一个POM)

作用

快速构建项目(无需根据依赖关系手动构建,直接在聚合工程上构建即可)

通过module标签聚合

<modules>
	<module>../jd-mall-admin</module>
	<module>../jd-mall-domain</module>
	<module>../jd-mall-fresh</module>
	<module>../jd-mall-market</module>
</modules>

继承和聚合

聚合用于快速构建项目

继承用于快速配置(提取共性配置)

相同点

打包方式均为pom,可以将两种关系制作到同一个pom中

均属于设计型模块

区别

聚合是在当前模块中配置关系,可以直到哪些模块参与了聚合

继承是在子模块中配置关系,无法知道哪些子模块继承了父模块.

私服

私服引入

将jar包传入私服仓库,其他人只需要知道依赖坐标就可以从仓库中下载.

如果使用的是第三方依赖,会先下载到私服仓库中,所有人可以直接从私服仓库中使用.

工程版本

SNAPSHOT(快照版本)

临时的输出版本,称为快照版本

快照版本会随着开发进展不断更新

RELEASE(发布版本)

向团队外部发布的稳定版本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1667326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序的Vant Weapp组件库(WeUI组件库)

一、定义&#xff1a; 是一套开源的微信小程序UI组件库。提供了一整套UI基础组件和业务组件&#xff0c;能够快速地搭配出一套风格统一的页面 二、使用&#xff1a; &#xff08;1&#xff09;&#xff08;找到.eslintrc.js 右键&#xff0c;在内件终端打开&#xff09;打开命…

springcloud整合网关(springcloud-gateway) 跨域处理

pom引入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!-- 服务注册 --><dependency><groupId>com.alibaba.cloud</groupId&…

抛弃Elasticsearch ,MeiliSearch 从入门到入门,现在不精通

Elasticsearch 做为老牌搜索引擎&#xff0c;功能基本满足&#xff0c;但复杂&#xff0c;重量级&#xff0c;适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求&#xff0c;极快&#xff0c;单文件&#xff0c;超轻量。 所以&#xff0c;对于中小型项目来说…

事件高级。

一、注册事件&#xff08;绑定事件&#xff09; 就是给元素添加事件 注册事件有两种方式&#xff1a;传统方式和方法监听注册方式 1 传统注册方式 方法监听注册事件 2、 addEventListener 事件监听方式 里面的事件类型是字符串&#xff0c;必定加引号&#xff0c;而且不带o…

【DIY小记】深圳万象天地餐馆探店点评

第一次在技术博客里面写生活日记&#xff0c;也算是破了个小天荒。个人以为&#xff0c;博客是个人生活思考的载体&#xff0c;而技术只占生活的一部分&#xff0c;那么博客里为什么一定要限制只能够写技术内容&#xff0c;不能写点其它生活上的东西呢&#xff1f;思来想去&…

WHAT - CSS Animationtion 动画系列(三)- 动画卡顿分析

目录 一、背景二、动画卡顿具体分析三、具体优化方法3.1 JavaScript:优化 JavaScript 代码1. requestAnimationFrame 优化2. Web Worker3.2 Style:减少 DOM 操作3.3 Layout:避免频繁触发布局的动画3.4 避免强制同步布局事件3.5 Paint&Composite:GPU加速一、背景 自 HT…

查询新加 字段不返回数据要看 有没有 AllInfoResultMap 有要再里面加字段

查询新加 字段不返回数据要看 有没有 AllInfoResultMap 有要再里面加字段

深度学习+计算机视觉

在旷视 这个ai四小龙 深度学习 是必不可少&#xff0c;而且这年头…… 机器学习:在预定义的可能性空间中&#xff0c;利用反馈信号的指引&#xff0c;在输入数据中寻找有用的表示和规则 原理 a. 对神经网络的权重&#xff08;有时也被称为该层的参数&#xff09;进行随机赋值…

MFC的view视图为何不能拖入控件

在MFC中&#xff0c;View类通常用于显示和处理应用程序的数据&#xff0c;而不是直接用于设计用户界面。因此&#xff0c;默认情况下&#xff0c;MFC的View类是不支持在设计时拖动控件的。 MFC中设计用户界面通常使用的是对话框类&#xff08;Dialog&#xff09;或窗口类&…

C++入门必读-Qt的安装与配置

QT简介 Qt是一个跨平台的C图形用户界面应用程序框架。它为应用程序开发者提供建立图形界面所需的所有功能。它是完全面向对象的&#xff0c;很容易扩展&#xff0c;并且允许真正的组件编程。 QT下载 访问下载网站: Index of /archive/qt 安装编译器 QT安装 建议安装之前将网络断…

从关键新闻和最新技术看AI行业发展(2024.4.22-5.5第二十二期) |【WeThinkIn老实人报】

写在前面 【WeThinkIn老实人报】旨在整理&挖掘AI行业的关键新闻和最新技术&#xff0c;同时Rocky会对这些关键信息进行解读&#xff0c;力求让读者们能从容跟随AI科技潮流。也欢迎大家提出宝贵的优化建议&#xff0c;一起交流学习&#x1f4aa; 欢迎大家关注Rocky的公众号&…

Scoop国内安装、国内源配置

安装配置源可参考gitee上的大佬仓库&#xff0c;里面的步骤、代码都很详细&#xff0c;实测速度也很好 glsnames/scoop-installer 也可以结合其它bucket使用 使用Github加速网站&#xff0c;也可以换做其他代理方式&#xff0c;自行测试 例如&#xff1a;https://mirror.ghprox…

点云DBSCAN聚类,同时获取最多点数量的类,同时删除其他的类并显示

代码的主要目的是处理一个点云文件(从某个巷道或类似环境中获取的),并尝试识别并可视化其中的主要结构(比如墙壁),同时去除可能的噪声和异常点。它首先读取一个点云文件,进行降采样和异常点移除,然后使用DBSCAN聚类算法对剩余的点云进行聚类,最后选择并可视化包含最多…

vscode+clangd阅读Linux内核源码

1. 禁用或卸载官方C/C插件. 2. 安装clangd插件 3. 清除之前的产物 4. 生成.config文件 5.编译生成内核镜像 6.编译内核模块 7.编译设备树文件 8.生成compile_commands.json文件 运行上述命令后&#xff0c;在内核源码根目录生成了compile_commands.json文件 9.设置clangd插…

JAVA抽象类,接口与内部类,常用API知识总结

文章目录 抽象类和抽象方法抽象类的定义格式抽象方法的定义格式注意事项 接口定义和使用成员特点和类之间的关系新增JDK8新增方法JDK9新增方法 总结设计模式 内部类使用场景分类成员内部类获取内部类对象访问成员变量 静态内部类局部内部类匿名内部类格式使用场景 示例 常用API…

Java(三)---逻辑控制

文章目录 前言1.逻辑控制语句的分类1.顺序结构2.分支结构2.1.if结构2.1.1.if...else语句2.2.2.if ... else if... else语句 2.2.switch语句 3.循环结构3.1.while3.2.break3.3.continue3.4.for循环3.5.do while循环 4.输入输出4.1.输入到控制台4.2.从键盘输入 前言 前两篇文章&…

数据分析概念定义和发展前景

数据分析概念定义和发展前景 前言一、数据分析概念二、数据的定义数据的定义数据的分类定性数据定量数据 三、数据的价值数据为什么具有价值 四、数据分析的目的对于企业来说总结 五、数据分析类型的划分描述性统计分析探索性数据分析传统的统计分析方法验证性数据分析 六、 数…

240512-关于如何用VSCode编写C#程序的简单说明

240512-关于如何用VSCode编写C#程序的简单说明 从安装软件开始 &#xff0c;到编写一个HelloWorld的C#文件结束&#xff0c;介绍如何用VSCode编写C#程序 1 上官网下载一个安装包 官网地址&#xff1a;https://visualstudio.microsoft.com/zh-hans/downloads/ 2 打开安装包进…

3D分子生成的定制扩散框架 MolDiff - 评测

MolDiff模型是一种考虑分子键生成的3D分子生成的新模型。MolDiff是清华大学智能产业研究院马剑竹课题组发表在PMLR 2023的工作&#xff0c;第一作者是Xingang Peng&#xff0c;文章题目为&#xff1a;《 Addressing the Atom-Bond Inconsistency Problem in 3D Molecule Genera…

计算机毕业设计 | vue+springboot调查问卷管理系统(附源码)

1&#xff0c;研究目的 在进入21世纪以后&#xff0c;互联网得到了蓬勃的发展&#xff0c;电子问卷调查也开始逐渐流行起来。传统纸质问卷和电子问卷相比较后&#xff0c;传统问卷还存在很多弊端&#xff1a; 问卷分发起来比较困难&#xff0c;并且分发试卷耗费大量的金钱和时…