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

新手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基础入门 提示&#xff1a;java新人的学习之路记录 学习内容&#xff1a; 提示&#xff1a;了解并会初步使用maven构建管理java项目 Maven 是一个非常流行的 Java 项目管理和构建工具。它通过提供一套标准的构建生命周期和一组预定义的目标来简化 Java 应用程序的构建过…...

React 中级阶段学习计划

React 中级阶段学习计划 目标 掌握状态管理和路由。能够调用API并处理异步数据。学会使用CSS-in-JS和CSS Modules进行样式处理。 学习内容 状态管理 React Context API Context API&#xff1a;用于在组件树中传递数据&#xff0c;避免多层props传递。示例&#xff1a;im…...

[产品管理-47]:产品市场调研 - 一级市场、二级市场、次级市场?

目录 一、产品销售环节的一级二级市场 1、一级市场 2、二级市场 3、一级市场与二级市场的互动关系 二、金融中的一级二级市场 1、一级市场&#xff08;Primary Market&#xff09;- 新股发行、定向发行 2、二级市场&#xff08;Secondary Market&#xff09;- 普通投资者…...

Linux零基础教程学习(黑马)

1.初识Linux 1.2远程连接Linux系统 图形化、命令行 对于操作系统的使用&#xff0c;有2种使用形式&#xff1a; 图形化页面使用操作系统 以命令的形式使用操作系统 不论是Windows还是Linux亦或是MacOS系统&#xff0c;都是支持这两种使用形式。 图形化&#xff1a;使用操作…...

一款零依赖、跨平台的流媒体协议处理工具,支持 RTSP、WebRTC、RTMP 等视频流协议的处理

大家好&#xff0c;今天给大家分享一款功能强大的流媒体协议处理工具go2rtc&#xff0c;支持多种协议和操作系统&#xff0c;具有零依赖、零配置、低延迟等特点。 项目介绍 go2rtc可以从各种来源获取流&#xff0c;包括 RTSP、WebRTC、HomeKit、FFmpeg、RTMP 等&#xff0c;并…...

PHP 正则验证A-Z且排除某字母

都已经找到这里来了&#xff0c;相信已经尝试很多办法了&#xff0c;那么我们直接上答案 关键正则&#xff1a;(?!.*[IO]) //验证5到6个大写字母且排除I和O if (preg_match(/^(?!.*[IO])[A-Z\d]{5,6}$/u, AAAAM)) {echo "匹配成功"; } else {echo "匹配失败…...

如何安全运行别人上传的Python代码?

写后端的同学&#xff0c;有时候需要在网站上实现一个功能&#xff0c;让用户上传或者编写自己的Python代码。后端再运行这些代码。 涉及到用户自己上传代码&#xff0c;我们第一个想到的问题&#xff0c;就是如何避免用户编写危险命令。如果用户的代码里面涉及到下面两行&…...

matlab相位图

% 清空工作空间和命令窗口 clear; clc; % 模拟生成时间t&#xff0c;位移y(t)和角位移theta(t) t linspace(0, 100, 1000); % 时间从0到100&#xff0c;包含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报错&#xff1a;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&#xff08;简单&#xff09;&#xff1a; python代码&#xff1a; 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&#xff08;简…...

Axure重要元件三——中继器添加数据

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 本节课&#xff1a;中继器添加数据 课程内容&#xff1a;添加数据项、自动添加序号、自动添加数据汇总 应用场景&#xff1a;表单数据的添加 案例展示&#xff1a; 步骤…...

矩阵系统哪家好~矩阵短视频运营~怎么矩阵OEM

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

Axure树形菜单展开与折叠

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

开发一个微信小程序要多少钱?

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

AnaTraf | TCP重传的工作原理与优化方法

目录 什么是TCP重传&#xff1f; TCP重传的常见触发原因 TCP重传对网络性能的影响 1. 高延迟与重传 2. 吞吐量的下降 如何优化和减少TCP重传 1. 优化网络设备配置 2. 优化网络链路 3. 网络带宽的合理规划 4. 部署CDN和缓存策略 结语 AnaTraf 网络性能监控系统NPM | …...

python从0快速上手(一)python环境搭建 windows macos linux

Python环境搭建超详细指南 Python是一种广泛使用的高级编程语言&#xff0c;它以其简洁的语法和强大的功能而受到开发者的喜爱。对于初学者来说&#xff0c;搭建一个合适的Python开发环境是开始Python之旅的第一步。本文将为你提供一个超级详细的Python环境搭建指南&#xff0…...

麒麟aarch64架构下安装compat-openssl10

问题描述&#xff1a; 麒麟aarch64架构下安装mysql8.0.40,报错nothing provides libcrypto.so.10()(64bit) needed by 原因&#xff1a; 你当前系统的 OpenSSL 版本与 MySQL 8.0.40 所需的库不匹配。MySQL 8.0.40 需要 libcrypto.so.10&#xff0c;而你的系统使用的是 OpenS…...

React远程组件

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

ssm教师上课系统+vue

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

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

Visual Studio Code 扩展

Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后&#xff0c;命令 changeCase.commands 可预览转换效果 EmmyLua…...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

密码学基础——SM4算法

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