Maven:Maven基础

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(发布版本)

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++的数据结构(四):队列

在数据结构中&#xff0c;队列&#xff08;Queue&#xff09;是一种特殊的线性表&#xff0c;只允许在表的前端&#xff08;front&#xff09;进行删除操作&#xff0c;而在表的后端&#xff08;rear&#xff09;进行插入操作。队列中没有元素时&#xff0c;称为空队列。队列的…

小程序的小组件

进度的组件 文字换行过滤 以及 排序 简单易懂 只为了记录工作 <template><div><ProgressBar :progress"progress" /><button click"increaseProgress">增加进度</button><view class"goods-name">12…

电脑锁屏快捷键是哪个?1分钟弄懂锁屏设置!

“当我暂时不需要使用电脑时&#xff0c;想给电脑设置锁屏&#xff0c;有朋友知道电脑锁屏快捷键是哪个吗&#xff1f;” 随着信息技术的飞速发展&#xff0c;我们在日常生活中经常需要使用电脑。然而&#xff0c;当我们暂时离开电脑时&#xff0c;如何确保电脑信息安全&#x…

【解决】Android APK文件安装时 已包含数字签名相同APP问题

引言 在开发Android程序过程中&#xff0c;编译好的APK文件&#xff0c;安装至Android手机时&#xff0c;有时会报 包含数字签名相同的APP 然后无法安装的问题&#xff0c;这可能是之前安装过同签名的APP&#xff0c;但是如果不知道哪个是&#xff0c;无法有效卸载&#xff0c;…

图文详解:synchronized关键字 及其底层原理

目录 一.线程安全问题 二.synchronized关键字 ▐ synchronized图解 ▐ 可重入锁及图解 ▐ synchronized用于方法上 三.Java标准库中synchronized的使用 四.synchronized的底层实现原理 一.线程安全问题 线程安全是指在多线程环境下&#xff0c;对共享资源的访问不会导致…

详解循环队列——链表与数组双版本

前言&#xff1a;本节内容主要是讲解循环队列。 在本篇中会讲到两个版本——数组版本、链表版本。本篇内容适合正在学习数据结构队列章节或者已经学过队列但对循环队列感觉模糊的友友们 。 首先先来看一下什么是循环队列 什么是循环队列 因为是刚开始讲解&#xff0c; 所以我们…

【基础绘图】 10.饼图

效果图&#xff1a; 主要步骤&#xff1a; 1. 数据准备&#xff1a;自己赋值的随机数 2. 图像绘制&#xff1a;绘制饼图 详细代码&#xff1a;着急的直接拖到最后有完整代码 步骤一&#xff1a;导入库包及图片存储路径并设置中文字体为宋体&#xff0c;西文为新罗马&#…

totoriseSVN 常见问题

1. SVN 无法 clean up 上传时没有关闭 Excel&#xff0c;导致传入了一些临时文件&#xff08;文件名以$开头&#xff09;&#xff0c;关闭文件后临时文件自动删除&#xff0c;导致 SVN 版本错乱&#xff0c;使用 CleanUp 功能无效 更新时提示【Previous operation has not fin…

win7 phpstudy 多站点无法保存hosts的原因

1、先找到hosts文件位置 C:\Windows\System32\drivers\etc hosts文件不是txt的后缀&#xff0c;它是一个系统文件 2、如果不显示需要查找隐藏文件 组织-》文件夹和搜索选项-》查看-》取消隐藏文件夹的的√ 3、文件无法编辑 属性不要勾选只读

【SAP-FICO】SAP-FICO生产订单-结算规则配置路径(OKO7)

需求&#xff1a; 作为一个ABAPer&#xff0c;有接到一个狗屁倒灶的配置需求&#xff0c;要求如下&#xff0c;给生产订单的结算规则显示出来 图1&#xff1a;找一个生产订单&#xff0c;显示其结算规则 CO03→菜单栏-表头→结算规则 图2&#xff1a;查看该生产订单&#xff0c…

SMB/RPC协议分析之-命名/匿名管道pipe

在前面的文章中&#xff0c;介绍了SMB协议共享相关的内容&#xff0c;详见我的专栏《网络攻防协议实战分析》&#xff0c;连接这里。在SMB协议中往往需要连接到对应的远程管道&#xff0c;如果你经常接触到SMB协议&#xff0c;相信你对于lsass&#xff0c;svcctl等多种命名管道…

数据结构-二叉树-AVL树(平衡二叉树)

红黑树是平衡二叉树的一个变种。 一、 产生平衡二叉树的原因。 二叉搜索树的问题在于极端场景下退化为类似链表的结构&#xff0c;所以搜索的时间复杂度就变成了O(N)。为了保证二叉树不退化为链表&#xff0c;我们必须保证二叉树的的平衡性。 二叉平衡搜索树就是解决上面的问…

职场新人小王的沟通挑战与成长

近日&#xff0c;职场新人小王遇到了一个沟通上的小难题。作为刚刚踏入社会的新鲜人&#xff0c;小王在工作会议上因为一次直接的反馈而无意间触动了同事的敏感神经&#xff0c;导致双方关系稍显紧张。 在一次团队会议上&#xff0c;小王被要求分享对项目进度的看法以及建议。他…

【图解计算机网络】TCP 重传、滑动窗口、流量控制、拥塞控制

TCP 重传、滑动窗口、流量控制、拥塞控制 TCP 重传超时重传快速重传 滑动窗口流量控制拥塞控制慢启动拥塞避免拥塞发生快速恢复 TCP 重传 TCP重传是当发送的报文发生丢失的时候&#xff0c;重新发送丢失报文的一种机制&#xff0c;它是保证TCP协议可靠性的一种机制。 TCP重传…

9. SVG中的text元素

SVG (Scalable Vector Graphics) 提供了强大的文本渲染能力&#xff0c;其中<text>元素是常用 的文本操作的元素。本文将详细介绍<text>标签的基本使用方法&#xff0c;并展示如何通过<tspan>和<textPath>增强文本的表现力。 <text>标签基础 &…

【PHP【实战项目】系统性教学】——使用最精简的代码完成用户的登录与退出

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

MyBatis——MyBatis 参数处理

一、单个简单类型参数 简单类型包括&#xff1a; byte short int long float double char Byte Short Integer Long Float Double Character String java.util.Date java.sql.Date parameterType 属性&#xff1a;告诉 MyBatis 参数的类型 MyBatis 自带类型自动推断机制…

【Linux】centos7安装软件(rpm、yum、编译安装),补充:查找命令的相关文件路径,yum安装mysql

【Linux】技术上&#xff0c;Linux是内核。而术语上&#xff0c;我们通常说的Linux是完整的操作系统&#xff0c;其实称为"Linux发行版"&#xff0c;是将Linux内核和应用系统打包&#xff0c;由不同的发行家族发行了不同版本。Linux发行版众多&#xff0c;主要有RedH…

Debian常用命令:高效管理与运维的必备指南

在Linux世界中&#xff0c;Debian以其稳定性、安全性和开源精神赢得了广大用户的青睐。作为一个基于Linux的操作系统&#xff0c;Debian拥有丰富且强大的命令行工具&#xff0c;这些命令对于系统管理员和开发者来说至关重要。本文将为您介绍一系列Debian系统中的常用命令&#…

基于Javaee的影视创作论坛的设计与实现+vue论文

系统简介 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装影视创作论坛软件来发挥其高效地信息处理的作用&#xf…