当前位置: 首页 > news >正文

【Spring】1. Maven项目管理

封面

📚博客主页:爱敲代码的小杨.

✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》

❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️

🙏小杨水平有限,欢迎各位大佬指点,相互学习进步!


小杨近些在学习人工智能方面的知识,发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

文章目录

  • 1. 什么是 Maven
  • 2. 创建 Maven 项目
  • 3. Maven 的作用
    • 3.1 统一项目结构
    • 3.2 项目构建
    • 3.3 依赖管理
      • 依赖配置
      • 依赖传递
      • 依赖排除
  • 4. Maven 仓库
    • 4.1 本地仓库
    • 4.2 中央仓库
      • 查找 jar 包的地址
    • 4.3 私有服务器,也称私服
    • 4.4 Maven 设置国内源

1. 什么是 Maven

官方描述:

Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project’s build, reporting and documentation from a central piece of information.
翻译:Apache Maven是一个软件项目管理和理解工具。基于项目对象模型(POM)的概念,Maven可以从一个中心信息片段管理项目的构建、报告和文档

Maven 是⼀个项目管理工具, 通过 pom.xml文件的配置获取 jar包,而不用手动去添加 jar包。

前面学习 JDBC 的时候,就需要手动的去添加 jar包,学习了 Maven 就不用去手动添加 jar包了,只需要添加几行代码就可以添加 jar包了。
image.png

🚩:为什么要学习 Maven?

简单, 方便, 提高我们的开发效率, 减少我们的开发Bug.

2. 创建 Maven 项目

IDEA 本身已经集成了 Maven , 我们可以直接是用, 无需安装

  1. File -> New -> Project

image.png

  1. 填写项目名、存放位置、创建方式选择 Maven、选择JDK版本

image.png

  1. 点击Create,就创建好了 Maven 项目

image.png

3. Maven 的作用

3.1 统一项目结构

统一项目结构:提供标准、统一的项目结构
任何编译器创建 Maven 项目,其项目的结构都是一样的
image.png

3.2 项目构建

Maven 提供了标准的,跨平台(Linux, Windows, MacOS等)的自动化项目构建方式
当我们开发了⼀个项目之后, 代码需要经过编译, 测试, 打包, 发布等流程, 每次代码的修改, 都需要经过这些流程, 如果代码反复调试修改, 这个流程就需要反复进行, 就显得特别麻烦, 而 Maven 给我们提供了⼀套简单的命令来完成项目的构建
image.png
比如:是用package命令就可以对项目进行打包操作
image.png
打包就是把所有的 class文件, 全部放在一起, 打成 jar 包或者 war

jar包和war包都是⼀种压缩文件

  1. jar包就是把开发人员已经写好的⼀些代码进行打包. 打好的 jar包就可以引入到其他项目中, 也可以直接是用这些 jar包中的类和属性. 另外也可以打成可执行 jar包, 这样的包就可以通过 java -jar命令来执行
  2. war包可以理解为是⼀个web项目,里面是项目的所有东西, 通常用于网站.

3.3 依赖管理

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

pom.xml就是 Maven 的配置文件,用来描述项目的各种信息

依赖配置

依赖:只当前项目运行的所需要的 jar
比如:学习 JDBC 的时候,我们需要手动下载mysql-connector-java-5.1.47的包,并添加到项目中
image.png
如果是用 Maven, 我们只需要在pom.xml中引入mysql-connector-java的依赖就可以了

<dependencies><!--放置项目需要的依赖坐标,可以多个-->
</dependencies>
  1. pom.xml文件中<dependencies>标签内,添加依赖坐标
<dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency>
</dependencies>
  1. 点击刷新按钮, 引入新加入的依赖jar

后续有添加新的jar包, 或者修改jar包版本, 都需要通过该方式在项目中添加依赖.

image.png

  1. 刷新完之后, 就可以在项目中看到新加入的jar

image.png

依赖传递

早期我们没有是用 maven时, 向项目中添加依赖的jar包,需要把所有的jar包都复制到项目工程下.
比如 A 依赖 B, B依赖C, 那么 A项目引入 B 的同时, 也需要引入C, 如果我们手动管理这个依赖, 这个过程就会比较麻烦, 我们需要知道每个库都依赖哪些库, 以及这些依赖之间的版本是如何关联的?
但是用 maven 的话, 就可以避免管理所需依赖的关系。我们只需要在pom.xml文件中, 定义直接依赖就可以了, 由于 maven 的依赖具有传递性,所以会自动把所依赖的其他jar包也⼀起导入
image.png
如上图, 项目A 通过Maven 引入 Jar A 时, 会自动引入 Jar BJar C.
Jar A 和 项目B就是项目 A的直接依赖.
Jar B, Jar C是间接依赖.

  1. 直接依赖:在当前项目中通过依赖配置建立的依赖关系
  2. 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源

依赖排除

  • 排除依赖指主动断开依赖的资源,被排除的资源无需指定版本。
<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>6.0.6</version><!--排除依赖--><exclusions><exclusion><artifactId>spring-jcl</artifactId><groupId>org.springframework</groupId></exclusion></exclusions>
</dependency>

4. Maven 仓库

通过几行代码就可以把需要的 jar包放进项目中,是如何做到的呢?

<dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency>
</dependencies>

这个代码, 我们称之为 “坐标”, 也就是唯一的.
在 Maven中,根据groupIdartifactIdversion的配置,来唯一识别一个 jar包,缺一不可。
当我们在pom.xml文件中配置完依赖之后, 点击刷新, Maven会根据坐标的配置, 去仓库里寻找 jar包, 并把他下载下来, 添加到项目中. 这个jar包下载的地方就称为仓库.
仓库:用于存储资源,管理各种jar
image.png
Maven仓库的本质就是⼀个目录(文件夹),这个目录被用来存储开发中所有依赖(jar包, 插件等).
image.png
Maven仓库分为两大类: 本地仓库和远程仓库. 其中远程仓库又分为中央仓库, 私服 和其他公共库

4.1 本地仓库

本地仓库: 自己计算机上的一个目录(用来存储jar包)
当项目中引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar

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

image.png
idea配置 Maven
file->Settings->Maven
image.png
查看该仓库目录 可以看到该目录下有很多的jar(最开始是空的, 随着Maven的使用, 该仓库下文件会越来越多)
image.png

4.2 中央仓库

中央仓库: maven 软件中内置⼀个远程仓库地址,就是中央仓库,服务于整个互联网. 由 Maven 团队维护,全球唯一.
仓库地址:网址
可以通过https://mvnrepository.com 这个网址来查询并下载jar

查找 jar 包的地址

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

image.png

  1. 选择添加的 jar

image.png

  1. 查看 jar包坐标

image.png

4.3 私有服务器,也称私服

私服:一般由公司搭建的私有仓库。
私服属于某个公司,或者某个部门 往往需要⼀定权限.
有了私服之后, Maven依赖下载的顺序又发生了变化
image.png
当Maven需要下载资源的时候

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

4.4 Maven 设置国内源

因为中央仓库在国外, 所以下载起来会⽐较慢, 所以咱们选择借助国内⼀些公开的远程仓库来下载资源
如何设置国内源
File->Settings
image.png

  1. 查看配置文件的地址, 如上图所示, Maven配置文件地址为:‪C:\APP\Java\apache-maven-3.6.1\conf\settings.xml

不同电脑设置的Maven路径不同
settingsrepository 可以修改设置为其他路径, 两个路径不要有中⽂

  1. 配置国内源

Maven 仓库默认是在国外官网, 国内使用时会比较慢,我们可以更换为阿里云的仓库
打开settings.xml, 在 mirrors 节点上,添加内容如下:

<mirror><id>aliyunmaven</id><mirrorOf>central</mirrorOf><name>阿⾥云公共仓库</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

相关文章:

【Spring】1. Maven项目管理

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更…...

工业制造领涉及的8大常见管理系统,如mes、scada、aps、wms等

在工业生产和制造领域有一些常见的管理系统&#xff0c;很多小伙伴分不清&#xff0c;这次大美B端工场带领大家了解清楚。 MES&#xff08;Manufacturing Execution System&#xff0c;制造执行系统&#xff09;&#xff1a; MES是一种用于监控、控制和优化生产过程的软件系统…...

Lianwei 安全周报|2024.06.17

新的一周又开始了&#xff0c;以下是本周「Lianwei周报」&#xff0c;我们总结推荐了本周的政策/标准/指南最新动态、热点资讯和安全事件&#xff0c;保证大家不错过本周的每一个重点&#xff01; 政策/标准/指南最新动态 01 IDC&#xff1a;2024 第一季度中国安全硬件市场规模…...

海量数据处理利器 Roaring BitMap 原理介绍

作者&#xff1a;来自 vivo 互联网服务器团队- Zheng Rui 本文结合个人理解梳理了BitMap及Roaring BitMap的原理及使用&#xff0c;分别主要介绍了Roaring BitMap的存储方式及三种container类型及Java中Roaring BitMap相关API使用。 一、引言 在进行大数据开发时&#xff0c;…...

Javaweb登录校验

登录校验 JWT令牌的相关操作需要添加相关依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version> </dependency>一、摘要 场景&#xff1a;当我们想要访问一个网站时&am…...

vxe-table 列表过滤踩坑_vxe-table筛选

但是这个过滤输入值必须是跟列表的值必须一致才能查到&#xff0c;没做到模糊查询的功能&#xff0c;根据关键字来过滤并没有实现。 下面提供一下具体实现方法&#xff1a;&#xff08;关键字来过滤&#xff09; filterNameMethod({ option, row }) {if (row.name.indexOf(op…...

计算机网络:网络层 - IP数据报的转发

计算机网络&#xff1a;网络层 - IP数据报的转发 基于终点转发最长前缀匹配二叉线索树路由表特殊路由特定主机路由默认路由 IP多播 基于终点转发 路由器转发报文时&#xff0c;是通过报文中的目的地址字段来转发的&#xff0c;也即是说路由器只知道终点的IP地址&#xff0c;根…...

颠覆与创新:探寻Facebook未来的发展路径

Facebook&#xff0c;这个曾经引领社交网络革命的巨头&#xff0c;在如今竞争激烈的科技市场中&#xff0c;正面临着前所未有的挑战和机遇。如何在不断变化的数字世界中保持竞争力&#xff0c;成为业界领先者&#xff0c;这是摆在Facebook面前的重要课题。本文将探寻Facebook未…...

太湖远大毛利率下滑:研发费用率远低同行,募投项目合理性疑点重重

《港湾商业观察》黄懿 6月20日&#xff0c;浙江太湖远大新材料股份有限公司&#xff08;以下简称“太湖远大”&#xff0c;873743.NQ&#xff09;即将迎来过会。 2023年11月30日&#xff0c;太湖远大所提交的上市申请材料正式获北交所受理&#xff0c;保荐机构为招商证券&…...

赶紧收藏!2024 年最常见 20道设计模式面试题(八)

上一篇地址&#xff1a;赶紧收藏&#xff01;2024 年最常见 20道设计模式面试题&#xff08;七&#xff09;-CSDN博客 十五、模板方法模式是如何在父类中定义算法框架的&#xff1f; 模板方法模式通过在父类&#xff08;通常是一个抽象类&#xff09;中定义算法的骨架&#x…...

JAVA学习-练习试用Java实现“比较版本号”

问题&#xff1a; 给定两个版本号 version1 和 version2 &#xff0c;请比较它们。 版本号由一个或多个修订号组成&#xff0c;各修订号由一个 . 连接。每个修订号由 多位数字 组成&#xff0c;可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号&#xff0c;…...

云原生分级SLA

云原生分级SLA&#xff08;Service Level Agreement&#xff0c;服务等级协议&#xff09;规则是为了确保云服务提供商和客户之间对服务性能、可用性和其他关键指标有明确的理解和期望。这些规则通常基于业务需求和技术实现来制定&#xff0c;并根据服务的不同级别进行分级。以…...

java干货 线程间通信

文章目录 一、线程间通信1.1 为什么要处理线程间通信&#xff1f;1.2 什么是等待唤醒机制&#xff1f; 二、等待唤醒机制使用2.1 等待唤醒机制用到的方法2.1.1 wait2.1.2 notify 2.2 线程通信代码实践2.2.1 重要说明2.2.2 代码 一、线程间通信 1.1 为什么要处理线程间通信&…...

【人机交互 复习】第6章 交互式系统的设计

一、设计框架 1.在建立了一组需求之后&#xff0c;设计即将开始&#xff0c;建议采取自上面下的方式&#xff0c;首先把重点放在大的方面&#xff0c;生成低保真且不包含具体细节的方案&#xff0c;一般通过写剧本来确定交互设计模式与逻辑。 2.设计框架&#xff1a; 先站在一个…...

1-函数极限与连续

1 2 平方项没有考虑到&#xff08;其正负&#xff09;...

【C++题解】1670 - 象棋大赛

问题&#xff1a;1670 - 象棋大赛 类型&#xff1a;分支问题 题目描述&#xff1a; 市里要组织象棋大赛&#xff0c;年龄在 8∼30 周岁之间的选手可以报名参赛。为了公平起见&#xff0c;大赛组委会将选手们分了青年组、少年组和儿童组&#xff0c;大赛组委会规定&#xff1a…...

Samba:用于高效无限上下文语言建模的简单混合状态空间模型

Samba: Simple Hybrid State Space Models for Efficient Unlimited Context Language Modeling &#x1f4dc; 文献卡 Samba: Simple Hybrid State Space Models for Efficient Unlimited Context Language Modeling作者: Liliang Ren; Yang Liu; Yadong Lu; Yelong Shen; …...

通俗易懂的ChatGPT原理简介

一、引言 随着人工智能的发展&#xff0c;聊天机器人已经成为我们生活中的常见工具。而在众多聊天机器人中&#xff0c;ChatGPT 无疑是最受关注的一个。ChatGPT 是由 OpenAI 开发的一种基于生成式预训练模型&#xff08;GPT&#xff09;的大型语言模型。本文将通俗易懂地介绍 …...

你认为 AI 作图程序「MidJourney」有哪些比较好用的关键词?

玩了一段时间的MidJourney&#xff0c;打算把这个回答做成资源帖。也欢迎在评论区补充讨论。 MidJourney的极简指南 快速上手 装discord&#xff0c;或者直接打开网址 https://discord.gg/midjourney 注册用户。进入Midjourney的官方服务器后&#xff0c;在左侧栏找一个newb…...

9.2JavaEE——JDBCTemplate的常用方法(一)excute()方法

execute()方法用于执行SQL语句&#xff0c;其语法格式如下&#xff1a; jdTemplate.execute("SQL 语句");下面以创建数据表的SQL语句为例&#xff0c;来演示excute()方法的使用&#xff0c;具体步骤如下。 1、创建数据库 在MySQL中&#xff0c;创建一个名为spring的…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...