SpringBoot左脚进门之Maven管理家
一、概念
Maven 是一个项目管理和整合工具。通过对 目录结构和构建生命周期 的标准化, 使开发团队用极少的时间就能够自动完成工程的基础构建配置。
Maven 简化了工程的构建过程,并对其标准化,提高了重用性。

- Maven 本地仓库 (Local Repository):
- 每个开发者的计算机上都有一个本地仓库,用于存储下载的依赖库。
- 本地仓库通常位于用户的 ~/.m2/repository 目录下(在 Windows 上通常是 C:\Users<username>.m2\repository)。
- Nexus 私服 (Private Repository):
- Nexus 是一个流行的仓库管理工具,用于托管私有仓库。
- 私有仓库可以存储企业内部的库,也可以作为中央仓库的缓存,提高下载速度。
- 开发者通过 HTTP 访问 Nexus 私服,下载所需的依赖库。
- Maven 中央仓库 (Central Repository):
- Maven 中央仓库是公共的、开源的库仓库,包含了大量开源项目的库。
- 开发者可以通过 HTTP 访问 Maven 中央仓库,下载开源库。
工作流程:
- 开发者的 Maven 项目:
- 开发者在本地计算机上使用 Maven 管理项目。
- Maven 项目通过 pom.xml 文件定义依赖关系。
- 依赖查找:
- 当 Maven 需要下载一个依赖库时,它首先检查本地仓库。
- 如果本地仓库中没有该库,则 Maven 会尝试从 Nexus 私服下载。
- 如果 Nexus 私服中也没有该库,则 Maven 会从 Maven 中央仓库下载,并将该库缓存到本地仓库和 Nexus 私服中。
- 配置文件:
- settings.xml 文件用于配置 Maven 的全局设置,包括镜像、服务器认证信息等。
- pom.xml 文件用于定义项目的构建配置和依赖关系。
具体步骤:
- 本地仓库检查:
- Maven 首先检查本地仓库是否有所需的依赖库。
- Nexus 私服检查:
- 如果本地仓库中没有,Maven 会尝试从 Nexus 私服下载。
- Maven 中央仓库检查:
- 如果 Nexus 私服中也没有,Maven 会从 Maven 中央仓库下载,并将该库缓存到本地仓库和 Nexus 私服中。
二、Maven目录结构
根目录:工程名
|---src://源码
|---|---main: //存放主程序
|---|---|---java: //源码文件
|---|---|---resources: //存放框架的资源文件
|---|---test://存放测试程序
|---|---|---java: //java测试文件
|---|---|---resources: //java测试的资源文件
|---pom.xml://maven的核心配置文件
<project ...><modelVersion>4.0.0</modelVersion><groupId>com.itranswarp.learnjava</groupId><artifactId>hello</artifactId><version>1.0</version><packaging>jar</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.release>17</maven.compiler.release></properties><dependencies><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>2.0.16</version></dependency></dependencies>
</project>
三、仓库
Maven 仓库有两种类型:
- 本地仓库(local):自己电脑上存储资源的仓库,通过连接远程仓库获取资源
- 远程仓库(remote):非自己电脑上的仓库,为本地仓库提供资源
- 中央仓库:Maven团队维护,存储所有资源的仓库
- 私服:公司范围内存储资源的仓库,从中央仓库获取资源或自己的资源,仅对内部开放,不对外共享

本地仓库:
- 本地仓库说明:
Maven 本地仓库是机器上的一个文件夹,它在你第一次运行任何 maven 命令的时候创建。
Maven 本地仓库保存你的工程的所有依赖。当你运行一次 Maven 构建命令,Maven 会自动下载所有依赖的 jar 文件到本地仓库中。它避免了每次构建时都引用存放在远程机器上的依赖文件。
- 本地仓库存放位置
本地仓库默认被创建在 C:\Users\用户名.m2\ 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 settings.xml 文件中定义另一个路径。
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><localRepository>${user.home}/.m2/repository</localRepository>
</settings>
中央仓库:
Maven 中央仓库是由 Maven 社区提供的仓库。
//设置成功后,会从阿里的镜像库中获取依赖,不会从 Maven 中央仓库中获取依赖了。<!--添加如下配置:设置阿里镜像库-->
<mirror><id>ali</id><name>ali Maven</name><mirrorOf>*</mirrorOf><url>https://maven.aliyun.com/repository/public/</url>
</mirror>
私服:
私服是一种在公司内部或局域网中使用的远程仓库。它通常由公司自己搭建,用于存储公司内部开发的库和插件,也可以从中央仓库或其他远程仓库获取依赖。私服可以加快公司内部项目的构建速度,同时也可以避免外部网络不稳定对项目构建的影响。

四、坐标和依赖
<dependency><!--工程组的标识,它在一个组织或者项目中通常是唯一的,公司或域名倒序+项目名--><groupId>mysql</groupId><!--工程的名称,模块名--><artifactId>mysql-connector-java</artifactId><!--工程的版本号--><version>8.0.31</version>
</dependency>groupId:这是工程组的标识。它在一个组织或者项目中通常是唯一的。例如,一个银行组织 com.company.bank 拥有所有的和银行相关的项目。artifactId:这是工程的标识。它通常是工程的名称。例如,消费者银行。groupId 和 artifactId 一起定义了 artifact 在仓库中的位置。version:这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。例如: com.company.bank:consumer-banking:1.0 com.company.bank:consumer-banking:1.1
<dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.31</version><!--scope标签代表指定依赖范围--><scope>runtime</scope></dependency>
</dependencies>compile:默认值,适用于所有阶段(开发、测试、部署、运行),本jar会一直存在所有阶段;runtime:只在运行时使用,如JDBC驱动,适用运行和测试阶段;test:只在测试时使用,用于编译和运行测试代码,不会随项目发布;provided:只在开发、测试阶段使用。
五、Maven生命周期命令
| 命令 | 作用 |
|---|---|
| mvn compile | 编译主程序 src/main ,生成target目录,存放编译主程序生成的字节码文件,输出到 target/classes |
| mvn test-compile | 编译测试程序 src/main ,生成target目录,存放编译主程序生成的字节码文件,输出到 target/classes |
| mvn test | 编写的测试代码并生成测试报告(目前对于后端开发没有太大作用) |
| mvn package | 将项目打成jar包 |
| mvn clean | 清空项目本地编译目录 |
| mvn install | 将项目 安装到本地仓库(多个项目相互依赖 相互使用时.) |
这是最常用的生命周期,用于编译、测试、打包和部署项目。它的典型阶段包括:
- validate:验证项目的正确性以及所有必要的信息是否可用。
- compile:编译项目的源代码。
- test:使用合适的单元测试框架(如 JUnit)运行测试,但不包含生成的测试代码。
- package:将编译后的代码打包成可分发格式,如 JAR 或 WAR 文件。
- verify:对集成测试的结果进行检查,确保质量标准得到满足。
- install:将包安装到本地仓库,以便其他本地项目可以依赖它。
- deploy:在集成或发布环境中完成,将最终的包复制到远程仓库中。
相关文章:
SpringBoot左脚进门之Maven管理家
一、概念 Maven 是一个项目管理和整合工具。通过对 目录结构和构建生命周期 的标准化, 使开发团队用极少的时间就能够自动完成工程的基础构建配置。 Maven 简化了工程的构建过程,并对其标准化,提高了重用性。 Maven 本地仓库 (Local Reposi…...
188-下翻便携式6U CPCI工控机箱
一、板卡概述 下翻式CPCI便携工控机,系统采用6u cpci背板结构,1个系统槽,7个扩展槽, 满足对携带的需求,可装标准6U8槽CPCI主板,8个扩展槽, 满足客户对空间扩展的需求.可宽温服务的工作产品,15高亮度液晶显示屏,超薄88键笔记本键盘,触摸式鼠标,加固型机箱结构,使它能够适应各种复…...
Ubuntu 挂载目录
1. 临时挂载(重启后失效) 创建挂载点: $ sudo mkdir -p /work临时挂载磁盘到 work 目录: $ sudo mount /dev/nvme0n1p1 /work验证挂载是否成功: $ df -h /work此方法挂载在系统重启后会失效,需手动重新挂载…...
基于IEEE 802.1Qci的时间敏感网络(TSN)主干架构安全分析及异常检测系统设计
中文标题:基于IEEE 802.1Qci的时间敏感网络(TSN)主干架构安全分析及异常检测系统设计 英文标题:Security Analysis of the TSN Backbone Architecture and Anomaly Detection System Design Based on IEEE 802.1Qci 作者信息&…...
2024年食堂采购系统源码技术趋势:如何开发智能的供应链管理APP
本篇文章,小编将与大家一同探讨2024年食堂采购系统的技术趋势,并提供开发更智能的供应链管理APP的策略。 一、2024年食堂采购系统的技术趋势 1.人工智能与机器学习的深度应用 在2024年,AI和机器学习在食堂采购系统中的应用将更加普遍。这些…...
zotero安装教程(包括茉莉花插件)
zotero安装教程(包括茉莉花插件) zotero下载(windows)1-安装 Zotero2-安装 Zotero Connector3-安装浏览器插件--jasminum茉莉花功能:插件下载地址:[https://github.com/search?qjasminum&typerepositories](https://github.c…...
webpack4 - 配置文件分离(详细教程)
webpack根据开发和生成环境一般可以将配置文件拆分,拆分dev和prod两种环境 |- package.json|- /build|- webpack.base.js|- webpack.dev.js|- webpack.prod.js在scripts里修改相应的命令 "dev": "webpack-dev-server --config build/webpack.dev.j…...
MongoDB 分片
MongoDB 分片 MongoDB 分片是一种数据库架构,用于将大量数据分布存储在多个服务器上。这种设计允许数据库扩展,以处理大量数据和高吞吐量操作。分片通过将数据集分割成小块,称为分片,并将这些分片分布到多个服务器上来工作。每个…...
PHP加载MySQL扩展
PHP本身不具备操作MySQL数据库的能力,需要借助PHP操作MySQL的扩展来实现 1、PHP加载MySQL扩展:php.ini文件中 2、PHP中所有的扩展都在ext文件中,需要指定扩展所在路径:extension_dir 3、php.ini 已经被apache加载,所以…...
期末复习-计算机网络篇SCAU
第一章:概述 1.计算机网络的特点,互联网发展的三个阶段 特点:连通性、资源共享 三个阶段: 1969-1990:从单个网络ARPANET向互联网发展 1985-1993:建成了三级结构的互联网 1993-现在:全球范…...
使用LLM进行股价预测(附代码)
使用LLM进行股价预测(附代码) 注意 代码是完整的,但是需要 https://github.com/wxy2ab/akinterpreter 才能完整运行 利用 Python 和 AkShare 进行股票数据分析与预测:以中远海控为例 在本文中,我们将使用 Python 的 akshare 库获取中远海…...
分支限界笔记
文章目录 概要整体架构流程基本概念分支限界法的定义核心思想 简单问题介绍问题:简单背包问题思考:暴力解法聪明的解法:分支限界法直观理解分支限界法的步骤0-1背包问题问题描述问题建模问题分析1. 定义问题的解空间,确定易于搜索…...
PHP Cookie
Cookie 是什么? cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。 如何创建 Cookie? setcoo…...
Java后端面试场景题汇总
1.50 亿数据如何去重&排序? 如此大的数据集进行去重(例如50亿数据条目),我们需要考虑内存和存储空间的限制,同时还需要有一个高效的算法。一般来说,这样的数据量无法直接载入内存进行处理,因此需要采用磁盘存储和分布式处理的技术。主要有以下几种思路: 外部排序…...
【量化中的复权数据详解】
【复权计算方法】 股票会时不时的发生现金分红、送股等一系列股本变动,这会造成股价的非正常变化,导致我们不能直接通过股价来计算股票的涨跌幅。例如一个股票是10元,当他10送10的时候,它的价格会变成5元,但是我们并不…...
YOLO简史
【欢迎关注编码小哥,学习更多实用的编程方法和技巧】 YOLO历史 YOLO (You Only Look Once) 是一种流行的对象检测和图像分割模型,由华盛顿大学的 Joseph Redmon 和 Ali Farhadi 开发。YOLO 于 2015 年推出,因其高速和…...
低通滤波器,高通滤波器,公式
1 低通滤波器 :输出的是电容的电压 1 低通滤波器可以把低频信号上面的高频信号给滤掉 2 100hz正常通过 3 经过低通滤波器后,波形光滑,绿色波形。一致 4 电容充电速度跟不上输入信号的速度(因为加了电阻,限制了电流&…...
深入了解IPv6——光猫相关设定:DNS来源、DHCPv6服务、前缀来源等
光猫IPv6设置后的效果对比图: 修改前: 修改后: 一、DNS来源 1. 网络连接 来源: 从上游网络(如运营商)获取 IPv6 DNS 信息,通过 PPPoE 或 DHCPv6 下发。 特点: DNS 服务器地址直…...
前端国际化实战:从需求到落地的完整实践
"我们要开拓东南亚市场了!"产品经理小王兴奋地告诉我这个消息。作为技术负责人,我立刻意识到这意味着我们需要对整个系统进行国际化改造。说实话,虽然之前也做过一些多语言的项目,但面对一个正在运行的大型系统,国际化改造的挑战还是不小。 回想起上周的…...
React的状态管理库-Redux
核心思想:单一数据源、状态是只读的、以及使用纯函数更新状态。 组成部分 Store(存储) 应用的唯一状态容器,存储整个应用的状态树,使用 createStore() 创建。 getState():获取当前状态。dispatch(action)ÿ…...
别再写面条代码了!用STM32CubeMX实战单片机分层架构(附完整项目源码)
从面条代码到工程级架构:STM32CubeMX分层实战指南 当你第一次用STM32CubeMX生成代码时,那种一键配置外设的畅快感令人上瘾。但三个月后打开项目,面对main.c里2000行的超级函数和全局变量乱飞的局面,连自己都看不懂当初写的什么——…...
Instructions完全指南:快速创建iOS应用引导教程的终极解决方案
Instructions完全指南:快速创建iOS应用引导教程的终极解决方案 【免费下载链接】Instructions Create walkthroughs and guided tours (coach marks) in a simple way, with Swift. 项目地址: https://gitcode.com/gh_mirrors/in/Instructions Instructions是…...
StructBERT语义相似度工具快速体验:输入句子秒出结果
StructBERT语义相似度工具快速体验:输入句子秒出结果 1. 工具简介与核心价值 当你需要快速判断两段中文文字是否表达相同含义时,传统方法往往需要人工逐字比对或依赖复杂的算法配置。现在,基于StructBERT-Large模型的语义相似度工具让这个过…...
Sora 2官方API刚开放,我就用它给飞书文档里的产品说明配上了动态视频
Sora 2 API实战:如何为飞书文档中的产品说明自动生成动态解说视频 在当今快节奏的商业环境中,产品文档和说明的生动呈现变得越来越重要。静态的文字和图片已经无法满足用户对信息获取的需求,而动态视频则能更直观、更高效地传达复杂的产品功…...
DecompilerMC:揭秘Minecraft源码反编译的高效方案
DecompilerMC:揭秘Minecraft源码反编译的高效方案 【免费下载链接】DecompilerMC This repository allows you to decompile any minecraft version that was published after 19w36a without any 3rd party mappings, you just need to execute the script or the …...
如何将Rust二进制文件大小减少70%:min-sized-rust与主流优化方案全对比
如何将Rust二进制文件大小减少70%:min-sized-rust与主流优化方案全对比 【免费下载链接】min-sized-rust 🦀 How to minimize Rust binary size 📦 https://github.com/johnthagen/min-sized-rust 项目地址: https://gitcode.com/gh_mirror…...
nli-distilroberta-base精彩案例:开源项目README与代码功能逻辑一致性验证
nli-distilroberta-base精彩案例:开源项目README与代码功能逻辑一致性验证 1. 项目概述 在开源项目开发中,README文档与代码实现的一致性至关重要。nli-distilroberta-base作为基于DistilRoBERTa的自然语言推理(NLI)Web服务,为解决这一问题…...
Python爬虫实战:手把手教你古文字字形索引全量采集与图文数据库构建!
㊗️本期内容已收录至专栏《Python爬虫实战》,持续完善知识体系与项目实战,建议先订阅收藏,后续查阅更方便~ ㊙️本期爬虫难度指数:⭐ (基础入门篇) 🉐福利: 一次订阅后,专栏内的所有…...
Qwen3-14B Python数据分析环境配置:Anaconda与PyCharm集成
Qwen3-14B Python数据分析环境配置:Anaconda与PyCharm集成 1. 为什么需要专业的数据分析环境 在开始使用Qwen3-14B进行数据分析和AI应用开发前,搭建一个稳定、隔离的Python环境至关重要。想象一下,你正在装修房子,Anaconda就是你…...
MiniCPM-V-2_6 Anaconda环境快速搭建:隔离Python依赖一键启动
MiniCPM-V-2_6 Anaconda环境快速搭建:隔离Python依赖一键启动 你是不是也遇到过这种情况:想试试某个新的AI模型,结果光是配环境就折腾了大半天,各种包版本冲突,最后模型没跑起来,人先崩溃了。特别是像Mini…...
