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

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

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

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

相关文章

加州大学欧文分校英语高级语法专项课程01:Verb Tenses and Passives 学习笔记

Verb Tenses and Passives Course Certificate Course Intro 本文是学习 Verb Tenses and Passives 这门课的学习笔记。 文章目录 Verb Tenses and PassivesWeek 01: Simple, Progressive, and Perfect Verb Tenses ReviewLearning Objectives Present Perfect Tense Review L…

【动态规划四】子序列问题

目录 leetcode题目 一、最长递增子序列 二、摆动序列 三、最长递增子序列的个数 四、最长数对链 五、最长定差子序列 六、最长的斐波那契子序列的长度 七、最长等差数列 八、等差数列划分 II leetcode题目 一、最长递增子序列 300. 最长递增子序列 - 力扣&#xff0…

Java入门——继承和多态(中)

组合 和继承类似, 组合也是一种表达类之间关系的方式, 也是能够达到代码重用的效果. public class Student { ... } public class Teacher { ... } public class School { public Student[] students; public Teacher[] teachers; } 组合并没有涉及到特殊的语法(诸如 ex…

2023愚人杯 )————被遗忘的反序列化

<?php# 当前目录中有一个txt文件哦 error_reporting(0); show_source(__FILE__); include("check.php");class EeE{public $text;public $eeee;public function __wakeup(){if ($this->text "aaaa"){echo lcfirst($this->text);}}public functi…

量化交易:日内网格交易策略.md

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 本文将详细介绍日内网格交易策略的原理&#xff0c;并结合Python代码示例&#xff0c;展示如何在掘金平台上实现这一策略。 策略原理 日内网格交易策略的核心思想是在一天的交易时间内&#xff0c;通过设置多个买卖…

【谷粒商城】02安装和配置git

1.下载和安装git 地址&#xff1a;https://git-scm.com/download/win 傻瓜式安装 2.配置git DELLLJL MINGW64 ~/Desktop $ git config --global user.name "yufuabu"DELLLJL MINGW64 ~/Desktop $ git config --global user.email "463999534qq.com"DELL…

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

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

git知识总结

要知道 本地回退后&#xff0c;反悔了&#xff0c;可以恢复。前提是已经提交了&#xff0c;提交了就丢不了。 git reflog git reset --hard commitId 以前git push不让推&#xff0c;就是没有对应关系。第一次推要setxxx参数。 前奏 设置用户名和邮箱&#xff0c;设置错…

回溯之组合总和II

上一篇文章使用回溯解决了组合总和I&#xff0c;这次使用回溯解决组合总和II&#xff0c;下面先给出回溯的模板代码。 private void backtracking(参数1,参数2,...){if(递归终止条件){收集结果;return;}for(遍历集合){处理;backtracking(参数1,参数2,...); // 递归;回溯;} }组…

5. FactoryTalk View SE -- 模拟量趋势记录

step1&#xff1a; 在项目列表下找到数据记录–数据记录模型–新建。 step2&#xff1a;更改描述、文件标识符、存储格式。 step3&#xff1a;更改文件缓存路径。 step4&#xff1a;更改缓存文件保存的周期。 step5&#xff1a;5s保存一次数据。 step6&#xff1a;添加标…

从零开始搭建Springboot项目脚手架2:配置文件、返回值、日志等

1、多个环境与配置文件 2、统一返回值 返回值包括两种场景&#xff1a;正常controller的返回、异常发生之后返回 正常controller的返回&#xff1a;通过在controller的默认返回Response实现 异常发生之后返回&#xff1a;通过全局异常处理统一捕获返回 首先创建类StatusCode…

[Spring Cloud] (7)gateway防重放拦截器

文章目录 简述本文涉及代码已开源Fir Cloud 完整项目防重放防重放必要性&#xff1a;防重放机制作用&#xff1a; 整体效果后端进行处理 后端增加防重放开关配置签名密钥 工具类防重放拦截器 前端被防重放拦截增加防重放开关配置请求头增加防重放签名处理防重放验证处理函数bas…

打造清洁宜居家园保护自然生态环境,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建自然生态场景下违规违法垃圾倾倒检测识别系统

自然生态环境&#xff0c;作为我们人类赖以生存的家园&#xff0c;其健康与否直接关系到我们的生活质量。然而&#xff0c;近年来&#xff0c;一些不法分子为了个人私利&#xff0c;在河边、路边等公共区域肆意倾倒垃圾&#xff0c;严重破坏了环境的健康与平衡。这种行为不仅损…

18.04版本的ubuntu没有连接网络的图标(坑人版)

以下更新内核别看&#xff0c;因为后面安装驱动报一堆错误!!! 不升级内核成功方法跳转连接&#xff1a;https://blog.csdn.net/weixin_53765004/article/details/138771613?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%2213877…

单调栈问题

原理 单调栈的核心原理是&#xff1a;在栈内保持元素的单调性&#xff08;递增或递减&#xff09; 单调递增栈&#xff1a; 用于处理“下一个更小的元素”问题。当新元素比栈顶元素小或等于时&#xff0c;直接入栈&#xff1b;否则&#xff0c;一直从栈顶弹出元素&#xff0c…

OBS直播二次开发_OBS直播软件介绍

OBS工作室版 免费且开源的用于视频录制以及直播串流的软件。 下载以在Windows, Mac以及Linux上简单且快速的开始串流。 功能 实时高性能的视频/音频捕捉与混合,以及无限的场景模式使您可以通过自定义实现无缝转换。为视频源设计的滤镜例如图片蒙版,色彩校正,色度/色彩键控…

软件体系结构风格

目录 一、定义 二、.经典软件体系结构风格&#xff1a; 1.管道和过滤器 2.数据抽象和面向对象系统 3.基于事件系统&#xff08;隐式调用&#xff09; 4.分层系统 5.仓库 6.C2风格 7.C/S 8.三层C/S 9.B/S 题&#xff1a; 一、定义 软件体系机构风格是描述某一特定应用…

通过内网穿透实现远程访问个人电脑资源详细过程(免费)(NatApp + Tomcat)

目录 1. 什么是内网穿透 2. 内网穿透软件 3. NatApp配置 4. 启动NatApp 5. 通过内网穿透免费部署我们的springboot项目 通过内网穿透可以实现远程通过网络访问电脑的资源&#xff0c;本文主要讲述通过内网穿透实现远程访问个人电脑静态资源的访问&#xff0c;下一章节将讲…

C语言/数据解构——(随即链表的复制)

一.前言 嗨嗨嗨&#xff0c;大家好久不见。已经有好几天没更新了。今天我们就分享一道链表题吧——随即链表的复制https://leetcode.cn/problems/copy-list-with-random-pointer废话不多说&#xff0c;让我们直接开始今天的题目分享吧。 二.正文 1.1题目描述 他和单链表不同…

华为OD机试 - 求幸存数之和(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…