【Java EE】关于Maven

文章目录

  • 🎍什么是Maven
  • 🌴为什么要学Maven
  • 🌲创建⼀个Maven项目
  • 🌳Maven核心功能
    • 🌸项目构建
    • 🌸依赖管理
  • 🍀Maven Help插件
  • 🎄Maven 仓库
    • 🌸本地仓库
    • 🌸私服
  • ⭕总结

🎍什么是Maven

Maven是⼀个项⽬管理⼯具。基于POM(Project Object Model,项⽬对象模型)的概念,Maven可以通过⼀⼩段描述信息来管理项⽬的构建,报告和⽂档的项⽬管理⼯具软件。

大白话:Maven是⼀个项⽬管理⼯具,通过pom.xml⽂件的配置获取jar包,⽽不⽤⼿动去添加jar包

🌴为什么要学Maven

为了简单,⽅便,提⾼我们的开发效率,减少我们的开发Bug.

🌲创建⼀个Maven项目

IDEA本⾝已经集成了Maven, 我们可以直接使⽤, ⽆需安装

以下截图的idea版本为: 2022.1.4, 不同版本的idea界⾯展⽰会有所不同

File -> New -> Project
在这里插入图片描述

点击 Create, 就创建好了⼀个Maven项⽬
在这里插入图片描述
如果Maven jar包下载失败,可以参考博主写的

🌳Maven核心功能

Maven提供的功能⾮常多,Maven在项⽬开发中的作⽤.

主要体现在两个⽅⾯:

  1. 项⽬构建
  2. 管理依赖

🌸项目构建

Maven提供了标准的,跨平台(Linux,Windows,MacOS等)的⾃动化项⽬构建⽅式,当我们开发了⼀个项⽬之后,代码需要经过编译,测试,打包,发布等流程,每次代码的修改,都需要经过这些流程,如果代码反复调试修改,这个流程就需要反复进⾏,就显得特别⿇烦,⽽Maven给我们提供了⼀套简单的命令来完成项⽬的构建.
在这里插入图片描述
⽐如, 点击package, 就可以完成
在这里插入图片描述
在这里插入图片描述
打包就是把所有的class⽂件, 全部放在⼀起, 打成jar包或者war包

jar包和war包都是⼀种压缩⽂件
jar包就是把开发⼈员已经写好的⼀些代码进⾏打包. 打好的jar包就可以引⼊到其他项⽬中, 也可以直
接使⽤这些jar包中的类和属性. 另外也可以打成可执⾏jar包, 这样的包就可以通过java -jar命令来执

war包可以理解为是⼀个web项⽬,⾥⾯是项⽬的所有东西, 通常⽤于⽹站.

🌸依赖管理

上⾯说到, Maven是⼀个项⽬管理⼯具, 通过pom.xml⽂件的配置获取jar包,⽽不⽤⼿动去添加jar包
获取的jar包, 其实就是依赖

pom.xml就是maven的配置⽂件,⽤以描述项⽬的各种信息

🌻依赖配置

而我们一般是需要对pom.xml中引⼊相应的依赖。

⽐如博主在前面讲JDBC编程时,我们需要⼿动下载mysql-connector-java的包.并且添加到项⽬中.

在这里插入图片描述
如果使⽤Maven,我们只需要在pom.xml中引⼊mysql-connector-java的依赖就可以了

<dependencies>
<!--⾥⾯放置项⽬的依赖坐标, 可为多个 -->
</dependencies>

在pom⽂件 标签内,添加依赖坐标

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>8.0.30</version>
</dependency>

点击刷新按钮,引⼊新加⼊的依赖jar包

后续有添加新的jar包,或者修改jar包版本,都需要通过该⽅式在项⽬中添加依赖.
在这里插入图片描述
🌻依赖传递

早期我们没有使⽤maven时,向项⽬中添加依赖的jar包,需要把所有的jar包都复制到项⽬⼯程下.⽐如A依赖B,B依赖C,那么A项⽬引⼊B的同时,也需要引⼊C,如果我们⼿动管理这个依赖,这个过程就会⽐较⿇烦,我们需要知道每个库都依赖哪些库,以及这些依赖之间的版本是如何关联的

⽐如我们要吃⽕锅,需要有锅,有调料,有⻝材,以及确认什么样的锅,什么样的⻝材.
⽐如去医院看病,需要带上以往的病历,检查结果,处⽅等,并且要确认带的资料是正确的,如果⽇期错了,或者患者错了,带少了,就需要回去重新拿

但使⽤maven的话,就可以避免管理所需依赖的关系。我们只需要在pom⽂件中,定义直接依赖就可以了,由于maven的依赖具有传递性,所以会⾃动把所依赖的其他jar包也⼀起导⼊

⽐如吃⽕锅,现在我们可以点⼀个海底捞外卖,直接就把所有⻝材都送过来了,包括什么锅,配什么菜.⽐如去医院看病,借助"互联⽹",实现了信息共享,只需要带上⾝份证,以往的病历和检查结果就都可以看到了

在这里插入图片描述
如上图,项⽬A通过Maven引⼊Jar A时,会⾃动引⼊Jar B 和Jar C.

Jar A 和项⽬B就是项⽬A的直接依赖.
Jar B, Jar C是间接依赖.

🌻依赖排除
排除依赖: 指主动断开依赖的资源。(被排除的资源⽆需指定版本)

当前阶段我们需要依赖的库并不多,但随着项⽬的越来越复杂,库之间的依赖关系也会变得越来越复杂.

⽐如,我下了⼀个快递单⼦,默认会有⼀个服务,就是快递⼩哥会上⻔取件,但是我刚好要出⻔,⽽且顺路经过站点,也可以选择⾃⼰送过去

如上面所讲, 如果项⽬A不需要Jar B,也可以通过排除依赖的⽅式来实现.

🍀Maven Help插件

当项⽬⽐较复杂时,我们就会有Jar包冲突的问题,这时候就需要去解决依赖冲突.解决冲突之前,需要先找到冲突,我们可以使⽤Maven Help插件来观察包和包之间的依赖关系

安装插件:File -> Settings ->Plugins -> 搜索Maven Help -> 找到对应插件, 点击Install 安装即可, 安装后需要重启下idea,才能⽣效

理解 “插件” (plugin)
天⽕ + 擎天柱 => 会⻜的擎天柱.
天⽕在牺牲之前把⾃⼰变成了擎天柱的 “⻜⾏插件”. 在擎天柱需要起⻜的时候就变成翅膀装在擎天柱
⾝上. 不需要起⻜的时候就卸下来放到擎天柱的集装箱⾥.
程序开发的时候也经常如此.
像 IDEA 这样的程序虽然功能强⼤, 但是也⽆法⾯⾯俱到. 对于⼀些特殊场景的功能, 开发者就可以开
发⼀些 “插件”. 如果需要这个插件, 就单独安装

插件就是对程序的⼀些特定场景, 做出⼀些特定的功能的扩展
在这里插入图片描述
安装之后, 打开pom⽂件, 可以看到Jar包之间的依赖关系
在这里插入图片描述
也可以右键排除掉⼀些依赖
在这里插入图片描述

🎄Maven 仓库

我们通过短短⼏⾏代码,就把依赖jar包放在了项⽬⾥,具体是如何做的呢?

比如我们上面导入的mysql的jar包

这个代码,我们称之为"坐标",也就是唯⼀的.

在Maven中,根据groupId、artifactId、version的配置,来唯⼀识别⼀个jar包,缺⼀不可.

当我们在pom⽂件中配置完依赖之后,点击刷新,Maven会根据坐标的配置,去仓库⾥寻找Jar包,并把他下载下来,添加到项⽬中.这个Jar包下载的地⽅就称为仓库.仓库:⽤于存储资源,管理各种jar包

Maven仓库分为两⼤类:本地仓库和远程仓库.其中远程仓库⼜分为中央仓库,私服和其他公共库

Maven仓库的本质就是⼀个⽬录(⽂件夹),这个⽬录被⽤来存储开发中所有依赖(jar包, 插件等).

🌸本地仓库

本地仓库:⾃⼰计算机上的⼀个⽬录(⽤来存储jar包)

当项⽬中引⼊对应依赖jar包后,⾸先会查找本地仓库中是否有对应的jar包
• 如果有,则在项⽬直接引⽤

• 如果没有,则去中央仓库中下载对应的jar包到本地仓库
在这里插入图片描述
本地仓库地址可以通过Maven配置查看:

File -> Settings
在这里插入图片描述
中央仓库
中央仓库:maven 软件中内置⼀个远程仓库地址,就是中央仓库,服务于整个互联⽹.由Maven团队维护,全球唯⼀.

仓库地址:https://repo1.maven.org/maven2/

可以通过https://mvnrepository.com这个⽹站来查询并下载

那我们如何查找我们想要的jar包呢?可以分为以下三步
查找Jar的坐标

  1. 访问https://mvnrepository.com/
  2. 进⾏查找,⽐如mysql

在这里插入图片描述

  1. 选择要添加的Jar包版本

在这里插入图片描述
4. 查看Jar包对应坐标

在这里插入图片描述

🌸私服

私有服务器,也称为私服

私服:⼀般由公司团队搭建的私有仓库.

私服属于某个公司,或者某个部⻔,往往需要⼀定权限.

有了私服之后,Maven依赖下载的顺序⼜发⽣了变化
在这里插入图片描述
当Maven需要下载资源的时候

  1. 先从本地仓库获取,本地仓库存在,则直接返回
  2. 如果本地仓库没有,就从私服请求,私服存在该资源,就直接返回
  3. 如果私服上不存在该资源,则从中央仓库下载,中央仓库不存在,就报错了…
  4. 如果中央仓库中存在,就先缓存在私服上之后,再缓存到本地仓库⾥,再为Maven的下载请求提供服务

⭕总结

感谢大家的阅读,希望得到大家的批评指正,和大家一起进步,与君共勉!

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

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

相关文章

STM32G系 编程连接不上目标板,也有可能是软件不兼容。

由于一直用的老版本STM32 ST-LINK Utility 4.20 &#xff0c;找遍了所有问题&#xff0c;SWD就是连不上目标板。 电源脚 VDDA 地线&#xff0c;SWD的四条线&#xff0c;还是不行&#xff0c;浪费了一天&#xff0c;第二天才想起&#xff0c;是不是G系升级了 SWD协议。结果下载…

从汇编看函数调用

文章目录 函数调用流程栈相关寄存器及的作用简介寄存器功能指令功能 栈函数的括号{}正括号反括号 参数传递传值&#xff0c;变量不可改传指针&#xff0c;变量可改C 传引用 函数调用实例 函数调用流程 目标&#xff1a;函数调用前后栈保持不变 保存main函数的寄存器上下文移…

【HTML】简单制作一个3D动画效果重叠圆环

目录 前言 开始 HTML部分 CSS部分 效果图 总结 前言 无需多言&#xff0c;本文将详细介绍一段代码&#xff0c;具体内容如下&#xff1a; 开始 首先新建文件夹&#xff0c;创建两个文本文档&#xff0c;其中HTML的文件名改为[index.html]&#xff0c;CSS的…

Tensorflow2.0笔记 - 自定义Layer和Model实现CIFAR10数据集的训练

本笔记记录使用自定义Layer和Model来做CIFAR10数据集的训练。 CIFAR10数据集下载&#xff1a; https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz 自定义的Layer和Model实现较为简单&#xff0c;参数量较少&#xff0c;并且没有卷积层和dropout等&#xff0c;最终准确率…

Java—抽象方法与接口

声明&#xff1a;以下内容是根据B站黑马程序员的Java课程&#xff0b;博主自己的理解整理而成&#xff0c;课程很好&#xff0c;适合初学者学习。 关于此类题目&#xff0c;重要的是识别出用什么来实现&#xff0c;到底是接口还是抽象方法&#xff0c;还是共有的属性等等&…

医用三维影像PACS系统源码 一套成熟的PACS系统应具备哪些核心要素?

医用三维影像PACS系统源码 一套成熟的PACS系统应具备哪些核心要素&#xff1f; PACS及影像存取与传输系统”( Picture Archiving and Communication System)&#xff0c;为以实现医学影像数字化存储、诊断为核心任务&#xff0c;从医学影像设备&#xff08;如CT、CR、DR、MR、…

ZZS-7/1G212分合闸电源综合控制装置 220VAC 板前接线 JOSEF约瑟

系列型号&#xff1a; ZZS-7G/1分闸、合闸、电源监视综合控制装置&#xff1b; ZZS-7G/11分闸、合闸、电源监视综合控制装置&#xff1b; ZZS-7G/23分闸、合闸、电源监视综合控制装置&#xff1b; ZZS-7G/24分闸、合闸、电源监视综合控制装置&#xff1b; ZZS-7/1G11分闸、合闸…

21.兼容性测试

考试频率低&#xff1b; 一般考兼容性测试会结合web测试&#xff1b;&#xff08;兼容性矩阵&#xff09; 主要议题&#xff1a; 1.兼容性测试概述 2.硬件兼容性测试 最低配置不讲究工作负载&#xff0c;意思是软件能够运行的最低要求环境&#xff1b; 推荐配置&#xff0c…

修复503 Service Unavailable Error问题

近期我们网网站经常出现503 Service Unavailable Error&#xff0c;在此之前我们的网站从未出现过这种问题&#xff0c;我们向虚拟主机提供商Hostease咨询后&#xff0c;了解到503 Service Unavailable错误是指服务器暂时无法处理请求&#xff0c;通常是由于服务器过载、维护、…

Python数据结构与算法——数据结构(链表、哈希表、树)

目录 链表 链表介绍 创建和遍历链表 链表节点插入和删除 双链表 链表总结——复杂度分析 哈希表(散列表) 哈希表介绍 哈希冲突 哈希表实现 哈希表应用 树 树 树的示例——模拟文件系统 二叉树 二叉树的链式存储 二叉树的遍历 二叉搜索树 插入 查询 删除 AVL树 …

路由Vue-Router使用

Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成&#xff0c;让用 Vue.js 构建单页应用变得轻而易举。 介绍 | Vue Router (vuejs.org) 1. 安装 npm install vue-router4 查看安装好的vue-router 2. 添加路由 新建views文件夹用来存放所有的页面&#xff0c;在…

初入职,如何用好 git 快速上手项目开发

前言 介绍在工作中使用 git 工具 文章目录 前言一、git 简介1、是什么作用操作3、用途 二、基本概念1、工作区2、暂存区3、版本库4、操作过程 三、基本命令操作 一、git 简介 1、是什么 git 是一个方便管理代码版本的工具&#xff0c;用一个树结构来维护和管理所有的历史版本…

数据结构记录

之前记录的数据结构笔记&#xff0c;不过图片显示不了了 数据结构与算法(C版) 1、绪论 1.1、数据结构的研究内容 一般应用步骤&#xff1a;分析问题&#xff0c;提取操作对象&#xff0c;分析操作对象之间的关系&#xff0c;建立数学模型。 1.2、基本概念和术语 数据&…

Finite Element Procedures K.J.Bathe 【教材pdf+部分源码】|有限元经典教材 | 有限元编程

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

flask的使用学习笔记1

跟着b站学的1-06 用户编辑示例_哔哩哔哩_bilibili flask是一个轻量级&#xff0c;短小精悍&#xff0c;扩展性强&#xff0c;可以扩展很多组件&#xff0c;django大而全 编程语言它们的区别&#xff1a; (这些语言都很了解&#xff0c;java和python是高级语言&#xff0c;都…

动手做一个最小Agent——TinyAgent!

Datawhale干货 作者&#xff1a;宋志学&#xff0c;Datawhale成员 前 言 大家好&#xff0c;我是不要葱姜蒜。在ChatGPT横空出世&#xff0c;夺走Bert的桂冠之后&#xff0c;大模型愈发地火热&#xff0c;国内各种模型层出不穷&#xff0c;史称“百模大战”。大模型的能力是毋…

UE4几个常用节点链接

UE4几个常用节点链接 2017-12-02 12:54 1. 流光材质(及uv平铺次数) 2. 跑九宫格 3.闪光3。1 粒子闪烁效果 4.图案重复5.平移扭曲 6.溶解 刀光的uv滚动图片源或采样节点属性里改成clamp无后期发光光晕anistropic 各向异性高光法线图 法线图叠加 blendangle orrectedNo…

探索设计模式的魅力:揭秘B/S模式在AI大模型时代的蜕变与进化

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 揭秘B/S模式在AI大模型时代的蜕变与进化 &#x1f680;在AI的波澜壮阔中&#xff0c;B/S模式&…

为 AI 而生的编程语言「GitHub 热点速览」

Mojo 是一种面向 AI 开发者的新型编程语言。它致力于将 Python 的简洁语法和 C 语言的高性能相结合&#xff0c;以填补研究和生产应用之间的差距。Mojo 自去年 5 月发布后&#xff0c;终于又有动作了。最近&#xff0c;Mojo 的标准库核心模块已在 GitHub 上开源&#xff0c;采用…

面试题:JVM 调优

一、JVM 参数设置 1. tomcat 的设置 vm 参数 修改 TOMCAT_HOME/bin/catalina.sh 文件&#xff0c;如下图 JAVA_OPTS"-Xms512m -Xmx1024m" 2. springboot 项目 jar 文件启动 通常在linux系统下直接加参数启动springboot项目 nohup java -Xms512m -Xmx1024m -jar…