pom.xml文件

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

       Gredele------->比maven更简单的产品,如mybatis框架,ssm框架,spring框架等等,管理方式都是gredele

坐标

坐标的概念

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

坐标的意义

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

坐标的含义

  • groupId:组织标识,一般为:公司网址的反写+项目名
  • artifactId:项目名称,一般为:项目名-模块名
  • version:版本号 形式为0.0.1-SNAPSHOT:
  1. 第一个 0 表示大版本号,第二个 0 表示分支版本号,第三个 0 表示小版本号
  2. SNAPSHOT -- 快照版本,ALPHA -- 内侧版本,BETA -- 公测版本,RELEASE -- 稳定版本,GA -- 正式发布
  • packaging:打包的方式,如:pom, jar, maven-plugin, ejb, war, ...
  1. jar包:一般没有页面,有页面就一定是springboot项目
  2. pom包:只做依赖管理,不做任何代码实现,也没有代码管理和页面,代码项目由其子模块、子项目等实现
  • clissifier:用来帮助定义构件输出的一些附属构件。
示例一:自己的项目的坐标
<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!--
项目的全球唯一标识符,
通常使用全限定的包名区分该项目和其他项目并且构建时生成的路径也是由此生成,
如cn,tx.maven.生成的相对路径为:/cn/tx/maven
--><groupId>cn.tx.maven</groupId><!--
构件的标识符,它和groupId一起唯一标识一个构件,
也就是说,不能有两个不同的项目拥有同样的artifactId和groupId
--><artifactId>HelloFriend</artifactId><!--
项目当前版本,格式为:主版本.次版本.增量版本-限定版本号
--><version>0.0.1-SNAPSHOT</version><!--
项目产生的构件类型,例如jr、wàr、pom等。
插件可以创建他们自己的构件类型,所以前面列的不是全部构件类型
--><name>HelloFriend</name></project>
示例二:第三方项目的坐标
<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope></dependency>        <dependency><groupId>cn.tx.maven</groupId><artifactId>Hello</artifactId><version>0.0.1-SNAPSHOT</version><scope>compile</scope></dependency>        
</dependencies>

第一个dependency,引入了第三方的依赖包

第二个dependency,引入自己项目的依赖包

依赖

依赖的意义

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

       每个外部JAR可能还依赖于其他外部JAR文件等。以递归方式下载所有这些外部依赖JAR文件并确保下载正确的版本是一项巨大的任务。

       当项目越来越大,我们将需要越来越多的外部依赖。

       Maven将下载它们并将它们放在您的本地Maven存储库中。

       我们可以在POM文件中的dependencies元素内指定依赖关系。

依赖的使用

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

       属性说明:

       三维坐标:引用依赖包的三维坐标,用来定位该依赖包;

       scope: 控制该依赖包在什么情况下会被加到 classpath 中;

                   classpath有三种代码区(详见下文“依赖范围”):

                                   源代码,测试代码,运行时

第三方依赖的查找方法

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

​​​​​​​依赖范围

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包

依赖传递和可选依赖

依赖传递

应用场景:

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

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

解除依赖

例如:当MakeFriend想依赖HelloFriend而不依赖Hello项目时

1、暴力解除依赖

在hellofriend上修改,直接摘除hello,使得hellofriend仍然可以正常依赖hello,但其他依赖hellofriend的项目不会再次携带hello,也就是说hello只为hellofriend服务

2、可选依赖

当出现一个新项目依赖于makefriend时,是否摘除hello可以自主选择

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

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

​​​​​​​依赖阻断

例如在HelloFriend项目里面的Hello依赖处添加<optional>true</optional>

则makeFriend项目里面就不会再引入Hello的依赖

​​​​​​​可选依赖

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

<exclusions><!-排除依赖的单体--><exclusion><groupId>cn.tx.maven</groupId><artifactId>Hello</artifactId></exclusion>
</exclusions>

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【最后203篇系列】034 使用SQLite构建简单的任务管理

表数据同步的断点续传 有时候需要将一个表的数据复制到另一个表&#xff0c;循环是常用的方式。当表比较大&#xff0c;执行的时间很长&#xff0c;会有很多因素引起失败。我希望可以比较简单的跑数&#xff0c;所以做一个简单的任务系统。 SQLitre是嵌入式数据库&#xff0c;这…

SpringCloud Alibaba核心知识点

Spring Cloud Alibaba 是阿里巴巴开源的一套微服务解决方案&#xff0c;与 Spring Cloud 生态深度集成。以下是其主要组件及其功能&#xff1a;Nacos服务注册与发现&#xff1a;支持动态服务注册、健康监测及DNS-Based服务发现。配置中心&#xff1a;提供分布式配置管理&#x…

LeetCode 分类刷题:34. 在排序数组中查找元素的第一个和最后一个位置

题目给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。示例 1&#xff1a;…

自建知识库,向量数据库 (十二)之 文章向量搜索——仙盟创梦IDE

“未来之窗” 文章向量搜索&#xff1a;多领域应用与学习指南 在数字化浪潮中&#xff0c;“未来之窗” 文章向量搜索凭借其独特的技术优势&#xff0c;在酒店、电商、诊疗及知识库等多个领域展现出巨大的应用潜力&#xff0c;为各行业的信息处理与检索带来了全新的视角和高效…

深度剖析:基于反射的.NET二进制序列化器设计与实现

&#x1f50d; 深度剖析&#xff1a;基于反射的.NET二进制序列化器设计与实现本文将从底层原理到高级优化&#xff0c;全面剖析一个基于反射的.NET二进制序列化器的设计与实现&#xff0c;涵盖类型系统处理、内存布局、递归算法、性能优化等核心主题。1. 设计哲学与架构总览 1.…

如何在 Ubuntu 上安装和配置 Samba ?

Samba 是一个开源程序&#xff0c;用于文件共享和网络打印&#xff0c;使用 SMB 协议。现在基本上用于提供在 Windows 上可访问的 Linux 文件共享系统。 本文介绍如何在 Ubuntu 上安装和配置 Samba 服务器&#xff0c;以便跨文件夹共享网络上不同的计算机。 Update Your Syst…

MATLAB实现CNN-GRU-Attention时序和空间特征结合-融合注意力机制混合神经网络模型的风速预测

该 MATLAB 代码实现了一个基于 CNN-GRU-Attention 时序和空间特征结合-融合注意力机制混合神经网络模型的风速预测。以下是对代码的简要分析&#xff1a;一、主要功能 该代码用于风速时间序列预测&#xff0c;使用历史风速特征数据&#xff08;18个特征&#xff0c;75天&#x…

【升级版】从零到一训练一个 0.6B 的 MoE 大语言模型

前文&#xff1a;从零到一训练一个 0.6B 的 MoE 大语言模型&#xff0c;本次升级完全重新从零开始重新训练。主要升级如下&#xff1a; 替换预训练数据集&#xff0c;使用序列猴子通用文本数据集进行预训练。使用更先进的训练方法。新增思考模式控制&#xff0c;可通过添加/th…

51单片机-实现定时器模块教程

本章概述思维导图&#xff1a; 51单片机驱动定时器模块 CPU时序简介 CPU时序定义了CPU内部操作的时间节奏&#xff0c;以下从四个时序周期进行逐步解析&#xff1b; 1、振荡周期 振荡周期&#xff1a;CPU内部时钟源产生的最小时间单位&#xff0c;由晶振或内部振荡器决定&am…

7.Kotlin的日期类

以下是 Kotlin 中常用时间类&#xff08;基于 java.time 包&#xff09;的核心方法及使用示例&#xff0c;参考数组方法的表格形式&#xff0c;按类分类展示&#xff1a; 一、LocalDate&#xff08;日期&#xff1a;年/月/日&#xff09;方法签名返回值说明示例now(): LocalDat…

【Big Data】Hive技术解析:大数据仓库的SQL桥梁

Hive作为Apache顶级项目&#xff0c;是Hadoop生态系统中最具影响力的SQL查询引擎&#xff0c;它解决了大数据处理与传统SQL技能之间的鸿沟。Hive的核心价值在于将类SQL查询语言HiveQL无缝转换为分布式计算框架MapReduce的任务&#xff0c;使数据分析师能够利用熟悉的SQL语法操作…

Ubuntu2204server系统安装postgresql14并配置密码远程连接

前言&#xff1a; 最近因项目需要安装postgresql14&#xff0c;系统是ubuntu2204server系统&#xff0c;安装好后发现无法实现远程连接&#xff0c;解决了之后在此记录一下解决方法。 疑问&#xff1a; 什么情况下需要配置postgresql远程连接&#xff1f; ①如果是postgresql和…

【嵌入式】【搜集】状态机、状态迁移图及状态模式材料

文章目录状态机状态机状态机定义与核心特点状态机总结状态迁移图状态迁移图状态迁移图核心概念与要素状态迁移图常见错误与规避状态迁移图总结状态模式状态模式状态模式核心概念与组成状态模式核心价值与适用场景状态模式优缺点分析进阶优化技巧行为模式总结状态机 状态机 状…

Java学习历程14——制作一款五子棋游戏(4)

上次我们基本实现了五子棋游戏的功能&#xff0c;这次我们进行一些优化和添加一些便于用户使用的功能。新增功能及优化一、复盘功能复盘功能就是指在下完一局棋后&#xff0c;我们可以通过复盘按钮使本局棋的所有棋子重头开始自动下一遍。分析得知&#xff0c;我们首先要保存以…

记录一次el-table+sortablejs的拖拽bug

bug回顾出现bug的情况时 当编辑表格过于紧凑的时候 有些非必要编辑或需要一眼看到的数据 移动到了el-table-column typeexpand时 同事&#xff1a;怎么拖拽功能用不了了 ok开始检查代码 当原来是个简单的编辑表格 不涉及展开和简单拖拽时 不会出现问题 解决了 出现了展开行以后…

利用go sort.Sort()排序自定义切片

1 sort.Sort()简介2 核心功能3 调用前提4 代码示例 1 sort.Sort()简介 Go语言中的sort.Sort函数是标准库提供的通用排序接口 2 核心功能 核心功能支持多种类型进行快速排序 基础类型支持‌&#xff1a;内置Ints、Float64s、Strings等函数直接排序常见切片 自定义排序‌&a…

Elasticsearch脑裂紧急处理与预防

在 Elasticsearch 中出现 网络分区&#xff08;Network Partition&#xff09; 或 脑裂&#xff08;Split-Brain&#xff09; 导致两个子集群各自选出 Master 的情况&#xff0c;是非常严重的问题。比如这个场景&#xff08;20个节点分裂成两个10节点的子集群&#xff0c;各自选…

华为网路设备学习-29(BGP协议 四)路由策略-实验

示例 延伸-具体实验1.代码部分&#xff1a;基础配置R1 [Huawei]int GigabitEthernet 0/0/0 [Huawei-GigabitEthernet0/0/0]ip address 10.1.13.1 24[Huawei]int LoopBack 1 [Huawei-LoopBack1]ip address 172.16.1.1 24 [Huawei-LoopBack1]q [Huawei]int LoopBack 2 [Huawei-Lo…

500系列状态码与可能的场景

501 Not Implemented&#xff08;未实现&#xff09;HTTP 方法不支持客户端发送了 PUT、DELETE、PATCH 请求但服务器只实现了 GET 和 POST协议功能不支持客户端使用了 HTTP/2 的某些高级特性服务器只支持 HTTP/1.1&#xff0c;无法处理&#xff0c;返回 501API 接口未完成开发中…

大数据、hadoop、爬虫、spark项目开发设计之基于数据挖掘的交通流量分析研究

大数据、hadoop、爬虫、spark项目开发设计之基于数据挖掘的交通流量分析研究