新手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 系统…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

密码学基础——SM4算法
博客主页:christine-rr-CSDN博客 专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 编辑…...