Maven进阶——坐标、依赖、仓库

news2024/10/24 6:04:12

目录

1.pomxml文件

2. 坐标

2.1 坐标的概念

2.2 坐标的意义

2.3 坐标的含义

2.4 自己项目的坐标

2.5 第三方项目坐标 

3. 依赖

3.1 依赖的意义

3.2 依赖的使用

3.3 第三方依赖的查找方法

3.4 依赖范围

3.5 依赖传递和可选依赖

3.5.1 依赖传递

 3.5.2 依赖范围对传递依赖的影响

3.5.3 依赖阻断

 ​​​​​​​3.5.4 可选依赖

4. 仓库

​​​​​​​4.1 仓库的概念

4.2 本地仓库

​​​​​​​4.3 中央仓库

 ​​​​​​4.4 依赖搜索顺序


1.pomxml文件

就像 Make 的 MakeFile、Ant 的 build.xml 一样,Maven 项目的核心是 pom.xml。POM( Project Object Model,项目对象模型 ) 定义了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。

2. 坐标

2.1 坐标的概念

在 Maven 中坐标是构件的唯一标识,Maven 坐标的元素包括 groupIdartifactIdversion、packaging、classifier。上述5个元素中,groupId、artifactId、version 是必须定义的,packaging 是可选的 ( 默认为 jar )。

2.2 坐标的意义

  • Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范
  • 拥有了统一规范,就可以把查找工作交给机器

2.3 坐标的含义

groupId:组织标识,一般为:公司网址的反写+项目名

artifactId:项目名称,一般为:项目名-模块名

version:版本号 形式为0.0.1-SNAPSHOT:

                第一个 0 表示大版本号,第二个 0 表示分支版本号,第三个 0 表示小版本号

                SNAPSHOT -- 快照版本(√),ALPHA -- 内侧版本,BETA -- 公测版本,RELEASE -- 稳定版本(√),GA -- 正式发布

packaging:打包的方式,如:pom(只做依赖管理,不写代码), jar, maven-plugin, ejb, war(带有前端页面的), ...

clissifier:用来帮助定义构件输出的一些附属构件。

2.4 自己项目的坐标

2.5 第三方项目坐标 

3. 依赖

3.1 依赖的意义

       当编写Java代码时,我们总是需要一些库,例如,做单元测试我们需要JUnit库。对于更大的项目,我们可能需要创建自己的库并在不同的部分使用它的项目。不同的项目需要不同版本的库。 保持项目最新的库JAR文件的正确版本不是一个容易的任务。

        每个外部JAR可能还依赖于其他外部JAR文件等。以递归方式下载所有这些外部依赖JAR文件并确保下载正确的版本是一项巨大的任务。当项目越来越大,我们将需要越来越多的外部依赖。

       Maven将下载它们并将它们放在您的本地Maven存储库中。我们可以在POM文件中dependencies元素内指定依赖关系。

3.2 依赖的使用

      例如我们的项目需要进行单元测试,则需要使用到junit-4.9.jar包,使用maven引用该依赖的方式如下:

属性说明:

  • 三维坐标:引用依赖包的三维坐标,用来定位该依赖包;
    • scope: 控制该依赖包在什么情况下会被加到 classpath 中;

3.3 第三方依赖的查找方法

        我们在不确定所需引用的第三方依赖包的坐标时,通过maven的中央仓库进行查找,网址: https://mvnrepository.com/;

        以mybatis举例:

 引入成功。

3.4 依赖范围

Maven项目在开发工程中有三套classpath

  • 主代码:main下面的都是主代码在编译的时候的依赖
  • 测试代码:test下是测试代码编译的时候的依赖
  • 运行时:main代码在运行的时候对包的依赖

依赖范围的使用,通过在引用第三方依赖时的<scope></scope>标签进行设置,例如:

 

共 6 种 scope,包括:compileprovidedruntimetest、system、import。例如上图的junit,只在测试中使用,则选择test即可,默认为compile

  • Compile:编译依赖范围。默认使用此依赖范围,其下的maven依赖,对于编译,测试,运行classpath都有效。
  • Test:测试依赖范围。只对测试classpath有效,编译主代码或运行项目时无法使用此依赖。典型例子如junit。
  • Provided:已提供依赖范围。其对于编译与测试classpath有效,运行时无效。如在web开发时,只有在编译和测试时才用到servlet-api,将其设置为此范围,在运行时servlet-api由web容器提供,无须依赖。并且在打war包时,此范围的依赖不会打在WEB-INF/lib下。
  • Runtime:运行时依赖范围。与provided相对,运行时classpath有效。典型例子如jdbc编写是接口规范运行是提供具体实现类需要jar包

3.5 依赖传递和可选依赖

3.5.1 依赖传递

应用场景:

        第一直接依赖: HelloFriend项目依赖Hello项目

        第二直接依赖: MakeFriend项目依赖HelloFriend项目

 makeFriend项目只依赖了HelloFriend项目,但同时也把Hello项目依赖了进来。

 ​​​​​​​3.5.2 依赖范围对传递依赖的影响

  传递依赖是会受到依赖范围的影响的,具体来看结果如下:

3.5.3 依赖阻断

      例如我们在HelloFriend项目里面的Hello依赖处添加该配置 :

 <optional>true</optional>


    我们可以看到makeFriend项目现在只引入了HelloFriend的依赖而没有引入Hello的依赖:

依赖阻断表示,当HelloFriend被其他项目依赖时,不传递Hello的依赖至依赖于HelloFriend的项目。 

 ​​​​​​​3.5.4 可选依赖

       如果我们需要在依赖中明确的排除掉某一依赖,则可以使用exclusion属性,排除掉引用的依赖,如图: 

      可以看到,排除Hello后,依赖中就不会引入Hello。

4. 仓库

​​​​​​​4.1 仓库的概念

        在 Maven 的术语中,仓库是一个位置(place)。Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。

        在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方。

仓库的类型有:

  • 本地(local)
  • 中央(central)
  • 远程(remote)

4.2 本地仓库

        Maven 的本地仓库在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。

        默认情况下,不管Linux还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/respository/ 的仓库目录。Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %Maven_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。

​​​​​​​4.3 中央仓库

        Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到。

中央仓库的关键概念:

  • 这个仓库由 Maven 社区管理。
  • 不需要配置。
  • 需要通过网络才能访问。

 ​​​​​​4.4 依赖搜索顺序

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

推荐一个开源非线性视频编辑器:Kdenlive

Kdenlive是一个开源的视频编辑软件&#xff0c;项目始于约2003年。它基于Qt和KDE框架库构建&#xff0c;大部分视频处理由MLT框架完成&#xff0c;同时依赖其他开源项目如FFmpeg、frei0r、movit、ladspa、sox等。 软件特点&#xff1a; - 多轨视频编辑&#xff1a;支持多个音频…

大数据新视界 -- 大数据大厂之大数据和增强现实(AR)结合:创造沉浸式数据体验

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

2024 睿抗机器人开发者大赛(RAICOM)-【网络安全】CTF 部分WP

文章目录 一、前言二、MICS你是黑客么循环的压缩包Goodtime 三、WEBpy 四、Crypto变异凯撒RSAcrypto3 一、前言 WP不完整&#xff0c;仅供参考&#xff01; 除WEB&#xff0c;RE&#xff0c;PWN外&#xff0c;其余附件均已打包完毕 也是一个对MISC比较友好的一个比赛~ 123网…

springboot066人事系统(论文+源码)_kaic

基于vue的人事系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;作为学校以及一些培训机构&#xff0c;都在用信息化战术来部署线上学习以及线上考试&#xff0c;可以与线下的考试有机的结合在一起&#xff0c;实现基于vue的人事系统在技术上已成熟。本文介绍…

u盘装win10系统提示“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”解决方法

我们在u盘安装原版win10 iso镜像时&#xff0c;发现在选择硬盘时提示了“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”&#xff0c;直接导致了无法继续安装下去。出现这种情况要怎么解决呢&#xff1f;下面小编分享u盘安装win10系统提示“windows无法安装到这个磁盘…

信息安全工程师(53)网络安全审计机制与实现技术

前言 网络安全审计机制是指为了保护网络安全并发现潜在风险和漏洞而进行的一系列审计活动。审计的目的是检查并评估网络系统的安全性&#xff0c;以确保其符合相关法律法规和安全标准。 一、网络安全审计机制的重要性 网络安全审计机制对于保护组织的信息资产和敏感数据至关重要…

简单的 curl HTTP的POSTGET请求以及ip port连通性测试

简单的 curl HTTP的POST&GET请求以及ip port连通性测试 1. 需求 我们公司有一个演示项目&#xff0c;需要到客户那边进行项目部署&#xff0c;项目部署完成后我们需要进行项目后端接口的测试功能&#xff0c;但是由于客户那边么有条件安装类似于postman这种的测试工具&am…

CSS3文本阴影、文本换行、文本溢出、文本修饰、文本描边的使用

1.文本阴影&#xff1a;text-shadow 2.文本换行&#xff1a; white-space&#xff1a;pre&#xff08;可以理解为按原文显示&#xff09; white-space&#xff1a;pre-wrap&#xff08;不会超出父容器&#xff09; 3.文本溢出 text-overflow&#xff1a;ellipsis一般配合文本…

人工智能的未来:变革生活与工作的新篇章

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;我们正站在一个前所未有的变革时代。AI不仅重新定义了医疗、企业运营和日常生活的各个方面&#xff0c;还潜移默化地改变着我们的思维方式和工作习惯。本文将深入探讨人工智能技术的应用前景&#xff0c;以及…

web前端-html:简单创建表格表单相结合的网页

效果&#xff1a; <body><form action"这里如果为空表单提交后不会有任何操作"method"get"<label for"edit">用户名</label><input type"text" name"用户名" id"最好不要空&#xff0c;id属性…

【MySQL】详解MySQL数据类型

一、数据类型 各类型的数值范围&#xff1a; 在MySQL中&#xff0c;整型可以指定是有符号的和无符号的&#xff0c;默认是有符号的。 可以通过UNSIGNED来说明某个字段是无符号的。对于int类型可能存放不下的数据&#xff0c;尽量不使用unsigned&#xff0c;unsigned int 同样可…

分布式链路追踪-01初步认识SkyWalking

一 SkyWaling是什么&#xff1f; Skywalking是分布式系统的应用程序性能监视工具&#xff0c;专为微服务、云原生架构和基于容器&#xff08;Docker、K8s、Mesos&#xff09;架构而设计。SkyWalking 是观察性分析平台和应用性能管理系统&#xff0c;提供分布式追踪、服务网格遥…

信发软件之电脑版拖动——未来之窗行业应用跨平台架构

一、电脑版拖动 二、电脑版随意移动函数 var _movefalse;//移动标记 var _x,_y;//鼠标离控件左上角的相对位置 $("#"宿主id).click(function(){ }).mousedown(function(e){ _movetrue; _xe.pageX-parseInt($("#"宿主id).css("left")); _ye…

Spring Boot论坛网站:安全特性与性能优化

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

计算机网络(十二) —— 高级IO

#1024程序员节 | 征文# 目录 一&#xff0c;预备 1.1 重新理解IO 1.2 五种IO模型 1.3 非阻塞IO 二&#xff0c;select 2.1 关于select 2.2 select接口参数解释 2.3 timeval结构体和fd_set类型 2.4 socket就绪条件 2.5 select基本工作流程 2.6 简单select的服务器代…

论文解读 | ECCV2024 AutoEval-Video:一个用于评估大型视觉-语言模型在开放式视频问答中的自动基准测试...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 点击 阅读原文 观看作者讲解回放&#xff01; 作者简介 陈修元&#xff0c;上海交通大学清源研究院硕士生 概述 总结来说&#xff0c;我们提出了一个新颖且具有挑战性的基准测试AutoEvalVideo&#xff0c;用于全…

蓝牙资讯|iOS 18.1 正式版下周推送,AirPods Pro 2耳机将带来助听器功能

苹果公司宣布将在下周发布 iOS 18.1 正式版&#xff0c;同时确认该更新将为 AirPods Pro 2 耳机带来新增“临床级”助听器功能。在启用功能后&#xff0c;用户首先需要使用 AirPods 和 iPhone 进行简短的听力测试&#xff0c;如果检测到听力损失&#xff0c;系统将创建一项“个…

5G RedCap工业路由器赋能电力物联网应用

随着5G轻量化技术应用的推进&#xff0c;5G RedCap旨在提供低功耗、低成本、广覆盖等功能特点赋能电力智能化升级。特别适用于工业物联网、低空经济、车联网、消费电子和轻量级5G的需求。 5G RedCap工业路由器的特点 低功耗&#xff1a;5G RedCap工业路由器通过节能技术&#…

win10下用vscode和pycharm运行odoo18的速度对比

我很少用win平台开发odoo&#xff0c;主要原因就是速度太慢&#xff0c;效率太低&#xff0c;这次odoo18发布&#xff0c;我做odoo18的基础培训教程的时候&#xff0c;发现odoo运行速度相比以前有大大改观&#xff0c;虽然还是不如ubuntu&#xff0c;但是确实提高很多了环境&am…

如何搭建一部引人入胜的短剧小程序

在移动互联网时代&#xff0c;短剧小程序以其轻便、快捷的特点迅速成为人们消遣娱乐的新宠。无论是在通勤途中、休息时间还是等待间隙&#xff0c;用户都能通过手机轻松观看精彩短剧&#xff0c;享受碎片化时间的娱乐盛宴。如果你是一位对内容创作充满热情的创作者&#xff0c;…