新手maven入门学习教程
MAVEN基础入门
提示:java新人的学习之路记录
学习内容:
提示:了解并会初步使用maven构建管理java项目
Maven 是一个非常流行的 Java 项目管理和构建工具。它通过提供一套标准的构建生命周期和一组预定义的目标来简化 Java 应用程序的构建过程。Maven 使用 XML 格式的 POM(Project Object Model)文件来管理项目的构建过程、依赖管理和项目信息。
Maven 的基本概念
POM(Project Object Model)
POM 文件是 Maven 中的核心配置文件,通常命名为 pom.xml。
这个文件包含了项目的基本信息(如名称、版本)、构建设置、依赖关系、插件配置等。
生命周期(Lifecycle)
Maven 的生命周期定义了一系列可以按顺序执行的任务,这些任务被称为“目标”(goals)。
最常见的生命周期包括 clean、default 和 site 生命周期。
clean 生命周期用于清理以前的构建产物。
default 生命周期用于构建项目,包括编译、测试和打包等。
site 生命周期用于生成项目文档。
目标(Goals)
目标是生命周期中的具体任务,如 compile、test、package 等。
用户可以在命令行中指定这些目标来执行特定的操作。
插件(Plugins)
Maven 插件扩展了 Maven 的功能,提供了执行特定任务的能力。
插件可以配置在 POM 中,并且可以定义在不同的生命周期阶段执行。
仓库(Repositories)
Maven 使用仓库来存储和检索依赖项。
仓库分为本地仓库(默认存储在用户主目录下的 .m2 文件夹)、远程仓库(如中央仓库 Central Repository)和私有仓库(企业内部使用的仓库)。一般会先在本地仓库插找,再从远程仓库中查找,最后从中央仓库查找。
Maven 的优势
依赖管理:自动解析和下载项目依赖,减少了手动管理依赖的麻烦。
构建过程标准化:通过定义统一的生命周期和目标,使得构建过程更加一致。
多模块项目支持:可以方便地管理多模块项目,每个模块都可以有自己的 POM 文件。
项目信息管理:可以自动生成项目的文档和报告。
Maven 常用命令
mvn clean: 清理项目,删除之前的构建结果。
mvn compile: 编译项目的源代码。
mvn test: 运行项目的单元测试。
mvn package: 打包项目,生成 jar 或 war 文件。
mvn install: 将项目安装到本地仓库。
mvn deploy: 将项目发布到远程仓库。
Maven坐标:
Maven 坐标是用来唯一标识一个构件(Artifact)的一组元数据。每个构件都有五个主要的部分组成其坐标,这些坐标一起构成了构件的唯一标识符,不过,通常情况下,分类器和类型会被省略,除非需要特别指定。。以下是 Maven 坐标的组成部分:
GroupId(组ID):
组ID是一个唯一的标识符,通常采用组织或公司的逆向域名形式(如 com.example)表示当前maven项目隶属组织名称。它主要用于组织相关的构件。
ArtifactId(构件ID):
构件ID是项目的主要标识符,它通常反映了项目或库的功能或用途(如 myproject)。它是该maven项目的名称(通常是模块名)。
Version(版本号):
版本号用于标识构件的不同版本(如 1.0-SNAPSHOT)。Maven 支持多种版本控制方案,如快照(Snapshot)、发布(Release)等。
Classifier(分类器):
分类器是一个可选字段,用于区分同一个构件的不同变体(如 sources、javadoc 等)。分类器通常用于标识不同的构建输出,如源代码包、Javadoc 包等。
Type(类型):
类型字段指定了构件的文件类型(如 jar、war、pom 等)。最常见的类型是 jar,用于 Java 应用程序的可执行包。
提示:这里可以添加计划学习的时间
。
<groupId>com.example</groupId>
<artifactId>myproject</artifactId>
<version>1.0-SNAPSHOT</version>
<classifier>sources</classifier>
<type>jar</type>
依赖配置:
依赖:是指当前项目运行所需要的jar包,一个项目中可以引入多个依赖。
在 Maven 中,依赖配置(Dependency Configuration)是通过 pom.xml 文件中的 元素来定义的。依赖配置不仅指定了项目依赖的库,还定义了如何处理这些依赖项的细节
一个典型的依赖配置如下所示,对于一个新添加的依赖要刷新一下才会生效:
<!----pom中依赖的引用 --->
<dependencies><dependency><groupId>com.example</groupId><artifactId>myproject</artifactId><version>1.0-SNAPSHOT</version></dependency>
</dependencies>
更多的依赖引用方式可以再这个网站中查找:mvnrepository
依赖范围(Scope)
依赖范围(Scope)定义了依赖在构建生命周期中的适用阶段。常见的依赖范围包括:
compile:
默认范围,适用于编译阶段。这些依赖会随着应用一起被打包。
provided:
类似于 compile,但是在运行时假定由容器提供,不会被打包进最终的应用包中。
runtime:
适用于运行时阶段。这些依赖不会用于编译,但在运行时需要。
test:
仅用于测试阶段。这些依赖在编译和运行时不会包含在内。
system:
用于指定本地系统路径下的依赖,现在很少使用。
可选的配置元素
除了基本的依赖配置外,还有一些可选的配置元素,可以根据需要添加:
类型(Type): type 属性指定了依赖的类型,默认值是 jar。其他常见的类型包括 war、pom 等。
<dependency><groupId>com.example</groupId><artifactId>myproject</artifactId><version>1.0.0</version><type>war</type>
</dependency>
分类器(Classifier): 用于区分具有相同 groupId、artifactId 和 version 的不同版本,通常用于标识不同的构建输出,如源代码包、Javadoc 包等。
<dependency><groupId>com.example</groupId><artifactId>myproject</artifactId><version>1.0.0</version><classifier>javadoc</classifier><type>jar</type>
</dependency>
排除(Exclusions): exclusions 元素用于排除传递依赖中的某些库,避免不必要的依赖或冲突。
<dependency><groupId>com.example</groupId><artifactId>myproject</artifactId><version>1.0.0</version><exclusions><exclusion><groupId>log4j</groupId><artifactId>log4j</artifactId></exclusion></exclusions>
</dependency>
依赖传递
在 Maven 中,依赖传递(Dependency Transitivity)指的是当你在项目中声明了一个依赖时,这个依赖自身也可能有其他的依赖。Maven 会自动将这些间接依赖也包含到你的项目中,这就叫做依赖传递。换句话说,当你依赖于库 A 时,如果库 A 还依赖于库 B,那么库 B 也会自动成为你项目的依赖之一。
控制依赖传递
虽然依赖传递带来了便利,但也可能会引入不必要的依赖或导致版本冲突等问题。Maven 提供了几种方法来控制依赖传递:
**排除依赖(Exclusions):**你可以明确排除某个传递依赖,以防止它被包含进来。
<dependency><groupId>com.example</groupId><artifactId>libraryA</artifactId><version>1.0.0</version><exclusions><exclusion><groupId>com.example</groupId><artifactId>libraryB</artifactId></exclusion></exclusions>
</dependency>
上面的例子中,libraryA 依赖于 libraryB,但 Project X 明确排除了 libraryB,这样就不会将 libraryB 下载到本地仓库。
依赖范围(Scope):
通过设置依赖的范围,可以控制它在构建生命周期中的哪些阶段生效。例如,test 范围的依赖只会在测试阶段生效,而不会影响编译或运行时的行为。
<dependency><groupId>com.example</groupId><artifactId>libraryA</artifactId><version>1.0.0</version><scope>test</scope>
</dependency>
如果 libraryA 的范围被设置为 test,那么它只会出现在测试阶段,而不会被包含在最终的构建产物中。
**依赖管理(Dependency Management):**在父 POM 或者共享的 POM 中定义依赖管理,可以集中管理版本,减少重复定义。在子项目中引用依赖时,只需要声明而不必指定版本。
学习博客引用:
maven下载安装配置教程
黑马maven的idea配置
全面详解Maven的配置文件
相关文章:

新手maven入门学习教程
MAVEN基础入门 提示:java新人的学习之路记录 学习内容: 提示:了解并会初步使用maven构建管理java项目 Maven 是一个非常流行的 Java 项目管理和构建工具。它通过提供一套标准的构建生命周期和一组预定义的目标来简化 Java 应用程序的构建过…...
React 中级阶段学习计划
React 中级阶段学习计划 目标 掌握状态管理和路由。能够调用API并处理异步数据。学会使用CSS-in-JS和CSS Modules进行样式处理。 学习内容 状态管理 React Context API Context API:用于在组件树中传递数据,避免多层props传递。示例:im…...

[产品管理-47]:产品市场调研 - 一级市场、二级市场、次级市场?
目录 一、产品销售环节的一级二级市场 1、一级市场 2、二级市场 3、一级市场与二级市场的互动关系 二、金融中的一级二级市场 1、一级市场(Primary Market)- 新股发行、定向发行 2、二级市场(Secondary Market)- 普通投资者…...

Linux零基础教程学习(黑马)
1.初识Linux 1.2远程连接Linux系统 图形化、命令行 对于操作系统的使用,有2种使用形式: 图形化页面使用操作系统 以命令的形式使用操作系统 不论是Windows还是Linux亦或是MacOS系统,都是支持这两种使用形式。 图形化:使用操作…...

一款零依赖、跨平台的流媒体协议处理工具,支持 RTSP、WebRTC、RTMP 等视频流协议的处理
大家好,今天给大家分享一款功能强大的流媒体协议处理工具go2rtc,支持多种协议和操作系统,具有零依赖、零配置、低延迟等特点。 项目介绍 go2rtc可以从各种来源获取流,包括 RTSP、WebRTC、HomeKit、FFmpeg、RTMP 等,并…...
PHP 正则验证A-Z且排除某字母
都已经找到这里来了,相信已经尝试很多办法了,那么我们直接上答案 关键正则:(?!.*[IO]) //验证5到6个大写字母且排除I和O if (preg_match(/^(?!.*[IO])[A-Z\d]{5,6}$/u, AAAAM)) {echo "匹配成功"; } else {echo "匹配失败…...
如何安全运行别人上传的Python代码?
写后端的同学,有时候需要在网站上实现一个功能,让用户上传或者编写自己的Python代码。后端再运行这些代码。 涉及到用户自己上传代码,我们第一个想到的问题,就是如何避免用户编写危险命令。如果用户的代码里面涉及到下面两行&…...

matlab相位图
% 清空工作空间和命令窗口 clear; clc; % 模拟生成时间t,位移y(t)和角位移theta(t) t linspace(0, 100, 1000); % 时间从0到100,包含1000个点 y 1e-5 * sin(2 * pi * 0.1 * t) .* exp(-0.01 * t); % 位移y(t) 振荡衰减 theta 1e-6 * cos(2 * pi * …...

C语言笔记(指针的进阶)
目录 1.字符指针 2.指针数组 3.数组指针 3.1.创建数组指针 3.2.&数组名和数组名 1.字符指针 int main() { char ch w;char* pc &ch;const char *p "abcdef";//常量字符串 产生的值就是首元素的地址//常量字符串不能被修改 因此需要加上一个…...
NodeJS连接MySQL 8.4报错:code: ‘ER_TABLEACCESS_DENIED_ERROR‘
NodeJS连接MySQL 8.4报错:code: ER_TABLEACCESS_DENIED_ERROR { code: ER_TABLEACCESS_DENIED_ERROR, errno: 1142, sqlMessage: "SELECT command denied to user 用户名localhost for table 表名", sqlState: 42000, index: 0, sql: SELECT …...

力扣66~70题
题66(简单): python代码: class Solution:def plusOne(self, digits: List[int]) -> List[int]:s_str.join([str(i) for i in digits])nstr(int(s_str)1)n_strlist(n)res[int(i) for i in n_str]return res题67(简…...

Axure重要元件三——中继器添加数据
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 本节课:中继器添加数据 课程内容:添加数据项、自动添加序号、自动添加数据汇总 应用场景:表单数据的添加 案例展示: 步骤…...

矩阵系统哪家好~矩阵短视频运营~怎么矩阵OEM
一、引言 在当今的数字化时代,矩阵系统在众多领域中发挥着至关重要的作用,如视频监控、信号切换、自动化控制等。然而,如何判断一个矩阵系统是否好用成为了许多用户面临的问题。本文将从多个方面探讨矩阵系统好用与否的判断标准,希…...

Axure树形菜单展开与折叠
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:Axure树形菜单展开与折叠 主要内容:树形菜单制作——层级关系——隐藏与显示——值的变化——多层交互 应用场景:关系树、菜…...

开发一个微信小程序要多少钱?
在当今数字化时代,微信小程序成为众多企业和个人拓展业务、提供服务的热门选择。那么,开发一个微信小程序究竟需要多少钱呢? 开发成本主要取决于多个因素。首先是功能需求的复杂程度。如果只是一个简单的信息展示小程序,功能仅限…...

AnaTraf | TCP重传的工作原理与优化方法
目录 什么是TCP重传? TCP重传的常见触发原因 TCP重传对网络性能的影响 1. 高延迟与重传 2. 吞吐量的下降 如何优化和减少TCP重传 1. 优化网络设备配置 2. 优化网络链路 3. 网络带宽的合理规划 4. 部署CDN和缓存策略 结语 AnaTraf 网络性能监控系统NPM | …...
python从0快速上手(一)python环境搭建 windows macos linux
Python环境搭建超详细指南 Python是一种广泛使用的高级编程语言,它以其简洁的语法和强大的功能而受到开发者的喜爱。对于初学者来说,搭建一个合适的Python开发环境是开始Python之旅的第一步。本文将为你提供一个超级详细的Python环境搭建指南࿰…...
麒麟aarch64架构下安装compat-openssl10
问题描述: 麒麟aarch64架构下安装mysql8.0.40,报错nothing provides libcrypto.so.10()(64bit) needed by 原因: 你当前系统的 OpenSSL 版本与 MySQL 8.0.40 所需的库不匹配。MySQL 8.0.40 需要 libcrypto.so.10,而你的系统使用的是 OpenS…...

React远程组件
什么是远程组件? 远程组件指的是从远程服务器动态加载的组件,这些组件可以是React、Vue等框架的组件。 为什么需要远程组件 本质上就是为了解决复用问题,那引出新的问题有几种公共项目代码复用方式? Git仓库 将公共代码单独抽…...

ssm教师上课系统+vue
系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码请私聊我 需要定制请私聊 目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 [2 系统…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...

elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...