Maven基本使用

1. Maven前瞻


Maven官网:https://maven.apache.org/

Maven镜像:https://mvnrepository.com

image-20240706110401287

1.1、Maven是什么

Maven是一个功能强大的项目管理和构建工具,可以帮助开发人员简化Java项目的构建过程。

在Maven中,使用一个名为 pom.xml的核心配置文件来管理项目的依赖关系、编译设置、打包和部署等操作。


1.2、Maven的作用

  • 管理依赖(管理jar包)
  • 提供统一项目结构规范
  • 项目构建:使用一条命令就能实现一键构建(如 编译、测试、打包、发布等)

1.3、Maven的仓库类型

  • 本地仓库:本机电脑上缓存jar包的文件夹。默认是在 C:\Users\用户名\.m2\repository
  • 私服:由一些公司、组织搭建的仓库服务,通常是内部使用的
  • 中央仓库:由Maven官方维护的仓库,有世界上最全的开源jar包

1.4、Maven加载jar包的顺序

  1. Maven优先会从本地仓库加载jar包

  2. 如果本地仓库没有的话:

    • 如果有私服,就从私服下载jar包到本地仓库,然后再从本地仓库里引用

    • 如果没有私服,就从中央仓库下载jar包到本地仓库,然后再从本地仓库里引用

image-20240706105004198


1.5、Maven安装

1、下载maven安装包,解压到一个不含中文、空格、特殊字符的路径下。

2、配置环境变量 MAVEN_HOME、Path,然后cmd里执行 mvn -v 验证是否安装成功。

3、修改conf\settings.xml ,配置本地仓库路径:

<localRepository>本地仓库路径</localRepository>

4、修改conf\settings.xml,配置阿里云镜像仓库:

<mirror>
    <id>alimaven</id>
    <mirrorOf>central</mirrorOf>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>

1.6、IDEA集成Maven

1、配置Maven

image-20240706105849486

2、增加运行的参数: -DarchetypeCatalog=local,让Maven从本地仓库加载骨架信息;选择使用JDK11

image-20240706105957983


1.7、Maven的依赖范围

  • compile:默认的依赖范围,全范围有效。
  • test:单元测试有效。src/test里有效,src/main里无效。打包时会忽略
  • provided:编译时有效,运行时使用其它地方提供的jar包。备胎。打包时会忽略
  • runtime:运行时有效,编译时无效。比如:数据库驱动包
  • system:引入仓库之外的本地jar包。少用

实际开发中特殊的jar包:

  • Junit:依赖范围通常设置为test
  • servlet-api, jsp-api:依赖范围通常设置为provided
  • 数据库驱动包:依赖范围可以是默认的,也可以是runtime
  • 其它包,绝对多数都是默认依赖范围

1.8、项目构建的生命周期

Maven的三套生命周期:

  1. 清理生命周期:CleanLifeCycle

    常用命令有:clean

  2. 默认生命周期(构建生命周期):DefaultLifeCycle

    常用命令有:compile->test->package->install->deploy

  3. 站点生命周期:SiteLifeCycle

    常用命令有:site。生成Maven项目的描述信息文档

生命周期的作用:如果执行了一个目标命令:Maven会把生命周期里的命令,从第一个一直执行到目标命令为止。

  • clean:清理。执行后会删除项目的target文件夹【掌握】

  • compile:编译。编译项目源码,把编译的结果放到target目录里【掌握】

  • test:单元测试。注意:单元测试类必须放到src\test\java里,类名要求以Test结尾

  • package:打包。常见打包方式有:

    • jar:默认就是jar包

    • war:以前开发的时候,web项目要打成war包。

    • 设置打包方式:在pom.xml里添加 <packaging>打包方式</packaging>


1.9、引入依赖坐标

1、maven依赖标准结构,坤坤三件套:GAV

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>8.0.20</version>
</dependency>
  • groupId:公司域名反写
  • artifactId:项目名称
  • version:项目的版本号(SNAPSHOP快照版本,RELEASE稳定版本 )

2、如果引入的依赖在父工程中被锁定了,则不需要加版本号:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
   <!--<version>2.7.10</version>-->
</dependency>

2. 依赖冲突


Maven中添加的依赖是具有传递性的,如果项目中间接引入多个同名的依赖就会产生冲突,那么如何解决呢?

2.1、如何查看依赖冲突

方式1:以命令行方式查看依赖树(不建议用,依赖多的时候,不好查找)

mvn -Dverbose dependency:tree

方式2:使用 Maven Helper 插件查看

使用教程:https://blog.csdn.net/u011066470/article/details/135943032

image-20240706114319537


2.2、解决依赖冲突

  • 路径最短优先原则:主要根据依赖的路径长短来决定引入哪个依赖

    • 最先声明优先原则:如果两个依赖的路径一样,声明在前的则优先选择。

    • 排除依赖:使用exclusion标签排除依赖

    • 封装成rpc服务

image-20240706115001908

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/776939.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nginx-http_auth_basic_module使用

文章目录 前言一、ngx_http_auth_basic_module二、指令1.auth_basic1.auth_basic_user_file 示例生成密码文件配置basic认证浏览器验证 总结 前言 nginx可以通过HTTP Basic Authutication协议进行用户名和密码的认证。 一、ngx_http_auth_basic_module 生效阶段&#xff1a; …

Apache DolphinScheduler 与 AWS 的 EMR/Redshift 集成实践分享

引言 这篇文章将给大家讲解关于DolphinScheduler与AWS的EMR和Redshift的集成实践&#xff0c;通过本文希望大家能更深入地了解AWS智能湖仓架构&#xff0c;以及DolphinScheduler在实际应用中的重要性。 AWS智能湖仓架构 首先&#xff0c;我们来看一下AWS经典的智能湖仓架构图…

软件运维服务方案(Word原件2024)

软件运维服务方案&#xff08;Word原件&#xff09; 1. 服务简述 我们提供全面的软件运维服务&#xff0c;确保软件系统的稳定运行。 1.1 服务内容 包括监控、维护、故障排查与优化。 1.2 服务方式 结合远程与现场服务&#xff0c;灵活响应客户需求。 1.3 服务要求 高效响应&am…

计算机应用数学--第三次作业

第三次作业计算题编程题1 基于降维的机器学习2 深度学习训练方法总结 第三次作业 计算题 (15 分&#xff09;对于给定矩阵 A A A&#xff08;规模为 42&#xff09;&#xff0c;求 A A A 的 SVD&#xff08;奇异值分解&#xff09;&#xff0c;即求 U U U&#xff0c; Σ …

Spring 6.1.10版本源码编译

每篇一句 我们对时间的感知其实非常主观&#xff0c;我们越习惯于我们的生活方式&#xff0c;生活里面的新鲜感就越少&#xff0c;我们对时间 的感知就越快&#xff0c;生命就越短。 1.源码下载 进入Spring官网 https://spring.io/ 按照上图步骤进入如下Spring Framework链…

数据结构--单链表实现

欢迎光顾我的homepage 前言 链表和顺序表都是线性表的一种&#xff0c;但是顺序表在物理结构和逻辑结构上都是连续的&#xff0c;但链表在逻辑结构上是连续的&#xff0c;而在物理结构上不一定连续&#xff1b;来看以下图片来认识链表与顺序表的差别 这里以动态顺序表…

实现沉浸式体验的秘诀:深入了解折幕投影技术!

在当今多媒体技术的浪潮中&#xff0c;投影技术已蜕变成为超越传统内容展示范畴的非凡工具&#xff0c;它深度融合了互动性与沉浸感&#xff0c;成为连接观众与虚拟世界的桥梁。折幕投影技术&#xff0c;作为这一领域的璀璨明珠&#xff0c;更是以其独特而神奇的手法&#xff0…

小酌消烦暑|人间正清欢

小暑是二十四节气之第十一个节气。暑&#xff0c;是炎热的意思&#xff0c;小暑为小热&#xff0c;还不十分热。小暑虽不是一年中最炎热的时节&#xff0c;但紧接着就是一年中最热的节气大暑&#xff0c;民间有"小暑大暑&#xff0c;上蒸下煮"之说。中国多地自小暑起…

开发必备基础知识【字符编码合集】

开发必备基础知识【字符编码合集】 大家在日常开发交流中会发现&#xff0c;别人那里运行的好好的文件&#xff0c;在你电脑上却无法编译&#xff0c;甚至出现一堆莫名其妙的字符&#xff0c;比如&#xff1a;&#xfffd;&#xfffd;&#xfffd; 程序中经常遇到一些关于乱码…

科普文:如何进行有效沟通

概叙 你会沟通吗&#xff1f; 你知道正确的沟通应该怎么做吗&#xff1f; 在日常生活和工作中&#xff0c;不会沟通带来的困扰是否让你感同身受&#xff1f; 在工作中&#xff0c;你是否因表达不清让观点无法被同事理解和采纳&#xff0c;影响职业发展&#xff1f; 与上级交流是…

开源全新H5充值系统源码/自定义首页+充值页面/灵活对接上游渠道接口

开源全新H5充值系统源码&#xff0c;系统基于thinkphp框架开发&#xff0c;功能已全完善&#xff0c;可灵活对接其他上游渠道接口&#xff0c;默认对接了大猿人接口&#xff0c;另外可无限制自定义创建充值页面&#xff0c;首页支持后台自定义修改&#xff0c;支持三级分销&…

STM32嵌入式工业机器人控制系统教程

目录 引言环境准备工业机器人控制系统基础代码实现&#xff1a;实现工业机器人控制系统 4.1 数据采集模块 4.2 数据处理与分析 4.3 运动控制系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;工业自动化与优化问题解决方案与优化收尾与总结 1. 引言 工业机器人控制系统…

Java基础(六)——继承

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 ⚡开源项目&#xff1a; rich-vue3 &#xff08;基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL&#xff09; &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1…

计算机应用数学--第二次作业

第二次作业计算题编程题 第二次作业 计算题 给定图 G G G&#xff08;如图 1&#xff0c;图中数值为边权值&#xff09;&#xff0c;图切割将其分割成多个互不连通的⼦图。请使⽤谱聚类算法将图 G G G 聚类成 k 2 k 2 k2 类&#xff0c;使得&#xff1a; (a) RatioCut 最…

《向量数据库指南》——Milvus Cloud索引增强如何提升 RAG Pipeline 效果?

索引增强 1.自动合并块 在建立索引时&#xff0c;分两个粒度搭建&#xff0c;一个是chunk本身&#xff0c;另一个是chunk所在的parent chunk。先搜索更细粒度的chunks&#xff0c;接着采用一种合并的策略——如果前k个子chunk中超过n个chunk属于同一个parent chunk&#xff0c…

架构师学习理解和总结

1.架构设计理念 2.架构方法论 2.1需求分析 2.1.1常见需求层次 2.1.2 常见需求结果 2.1.3 需求与架构关系 2.2 领域分析 2.3 关键需求 2.4 概念架构设计 2.5 细化架构设计 2.6 架构设计验证 3.架构设计工具 3.1 DDD领域建模 3.2 41视图分析法 3.3 UML设计工具 4.架构师知…

Pathformer: multi-scale transformer

文章目录 摘要1 引言贡献 2 相关工作时间序列预测时间序列的多尺度建模 3 方法论3.1 多尺度变压器块多尺度划分双重注意力 3.2 自适应路径多尺度路由器多尺度聚合器 摘要 用于时间序列预测的变压器模型主要针对有限或固定尺度的时间序列进行建模&#xff0c;这使得捕捉跨越不同…

竞赛选题 卷积神经网络手写字符识别 - 深度学习

文章目录 0 前言1 简介2 LeNet-5 模型的介绍2.1 结构解析2.2 C1层2.3 S2层S2层和C3层连接 2.4 F6与C5层 3 写数字识别算法模型的构建3.1 输入层设计3.2 激活函数的选取3.3 卷积层设计3.4 降采样层3.5 输出层设计 4 网络模型的总体结构5 部分实现代码6 在线手写识别7 最后 0 前言…

如何实现一套键盘鼠标控制两台计算机(Mouse Without Borders快速上手教程)

需求背景 当我们需要同时使用一台主机和一台笔记本的时候&#xff0c;如果使用两套键盘和鼠标分别操作各自的系统&#xff0c;非常地不便捷且非常占据桌面空间。那么如何使用一套键盘鼠标控制两台电脑呢&#xff1f; 需求实现 软件说明 我们可以使用微软官方的一款软件Mous…

nodejs 获取客服端ip,以及获取ip一直都是127.0.0.1的问题

一、问题描述 在做登录日志的时候想要获取客户端的ip, 网上查了一下 通过 req.headers[x-forwarded-for] || req.connection.remoteAddress; 获取&#xff0c; 结果获取了之后不管是开发环境&#xff0c;还是生产环境获取到的一直都是 127.0.0.1&#xff0c;这是因为在配置N…