【maven】setting.xml文件详解

Maven 的主要作用

我们使用 Maven 最主要的就是使用它的依赖管理功能。当 A jar 包用到了 B jar 包中的某些类时,A 就对 B 产生了依赖,那么我们就可以说 A 依赖 B。

依赖管理中要解决的具体问题:

jar 包的下载:使用 Maven 之后,jar 包会从规范的远程仓库下载到本地
jar 包之间的依赖:通过依赖的传递性自动完成
jar 包之间的冲突:通过对依赖的配置进行调整,让某些 jar 包不会被导入

一、maven配置文件

Maven 的 settings.xml 文件是 Maven 的主要配置文件之一,用于配置 Maven 构建工具的全局设置。这个文件位于 Maven 安装目录的 conf 文件夹下,或者在用户的 ~/.m2/ 目录下。settings.xml 文件用于配置 Maven 的行为、仓库、代理等信息,是 Maven 构建过程中的重要配置文件。

在实际使用中,针对某一个具体的项目还会有一个maven配置文件pom.xml。settings.xml 用于配置 Maven 的全局环境,而 pom.xml 用于配置具体的 Maven 项目。全局环境配置是全局的,对所有 Maven 项目都起作用,而项目配置仅影响当前项目。

项目级别的配置会优先于全局配置,但并不是所有全局配置都能被项目级别的配置所覆盖。具体覆盖的范围取决于 Maven 的规则和支持的配置项。例如,如果在项目的 pom.xml 文件中配置了自定义的镜像、仓库、或者其他 Maven 构建相关的设置,那么这些项目级别的配置会覆盖 settings.xml 中的全局配置。

1、settings.xml

  • 作用: settings.xml 文件用于配置 Maven 的全局设置,影响整个 Maven 环境。
  • 位置: 通常位于 Maven 的 conf 目录下,全局共享给所有 Maven 项目。
  • 内容: 包括但不限于镜像配置、服务器身份验证信息、全局仓库配置等。
  • 示例: 用于配置 Maven 镜像、服务器信息等全局设置。

2、pom.xml

  • 作用: pom.xml 文件是 Maven 项目的配置文件,用于定义项目的结构、依赖、插件等信息。
  • 位置: 存在于每个 Maven 项目的根目录下。
  • 内容: 包括但不限于项目的坐标信息、依赖、插件配置、构建生命周期等。
  • 示例: 用于配置项目的依赖、插件、构建配置等。

二、setting.xml详解

以下是 settings.xml 文件的一些重要配置项和意义:

1、本地仓库路径 (<localRepository>)

: 配置本地 Maven 仓库的路径。默认情况下,Maven 会在用户的主目录下的 .m2/repository 文件夹中创建本地仓库。该仓库主要用来存储本地构建项目时所需要的依赖库(JAR 文件、插件等)。当 Maven 构建项目时,它会自动下载所需的依赖库并将其存储在本地仓库中,以便在将来的构建中重复使用,从而避免重复下载相同的库。

  • 依赖库: Maven 构建项目时会下载项目所需的依赖库,包括 Java 类库、框架库等。
  • Maven 插件: Maven 本身及构建过程中使用的插件。
  • 构建产物: 构建成功后生成的 JAR 文件、WAR 文件等构建产物。
  • POM 文件(pom.xml): Maven 项目的配置文件。
  • 其他 Maven 相关文件: 例如 Maven Wrapper(mvnw, mvnw.cmd)等。
<localRepository>/path/to/local/repository</localRepository>

2、远程仓库 (<mirrors>):

配置 Maven 使用的远程仓库的镜像。可以配置多个镜像,提高依赖库的下载速度。

<mirrors><mirror><id>mirrorId</id><url>https://maven.example.com/repository/maven-public/</url><mirrorOf>central</mirrorOf></mirror>
</mirrors>
  • <id>: 此镜像的唯一标识符,可以是任何字符串,用于区分不同的镜像。
  • <url>: 镜像仓库的基本 URL。当 Maven 需要从 Maven 仓库获取依赖库时,它将使用此 URL 替代中央 Maven 仓库的 URL。在这个示例中,使用了https://maven.example.com/repository/maven-public/作为镜像仓库的基本 URL。
  • <mirrorOf>: 指定了该镜像适用于哪个 Maven 仓库。在这个示例中,mirrorOf 设置为
    central,表示这个镜像仅适用于中央 Maven 仓库。这样的配置告诉 Maven,当它需要从中央 Maven 仓库获取依赖库时,应该使用这个镜像仓库而不是直接访问中央 Maven 仓库。镜像仓库的目的是为了提高依赖库的下载速度。其他 Maven 仓库(如其他第三方仓库或私有仓库)仍然会直接从它们自己的源地址获取依赖库。
    如果<mirrorOf>被设置为 *,表示这个镜像对所有 Maven 仓库都生效,即所有的 Maven 仓库都会使用这个镜像。这在某些情况下可能是有用的,特别是在没有直接访问外网的情况下使用本地或内部镜像。
    如果有多个镜像配置都匹配了同一个 <mirrorOf>,Maven 会按照 <mirrors> 中的顺序选择第一个匹配的镜像。
  • <name> 是用来指定镜像的名称的。这个名称通常是一个描述性的字符串,用于标识镜像的用途或提供一些有关镜像的信息。不会对 Maven 的行为产生影响,仅仅是用来提供对镜像的描述或标识。开发者可以根据需要随意设置这个名称。

3、代理 (<proxies>):

配置 Maven 使用的代理服务器信息。在 Maven 构建项目时,如果你的网络环境需要通过代理服务器才能访问外部资源(如 Maven 仓库、外部库等),就需要配置 Maven 使用的代理服务器信息。代理服务器通常用于过滤、缓存和管理网络请求,特别是在企业网络中。如果网络环境中没有代理服务器,这些配置通常是不需要的。

<proxies><proxy><id>example-proxy</id><active>true</active><protocol>http</protocol><host>proxy.example.com</host><port>8080</port><username>proxyuser</username><password>somepassword</password><nonProxyHosts>www.google.com|*.example.com</nonProxyHosts></proxy>
</proxies>

<id>: 代理的唯一标识符,可以是任何字符串。
<active>: 是否启用该代理。设置为 true 表示启用,false 表示禁用。
<protocol>: 代理协议,可以是 http、https 等。
<host>: 代理服务器主机名或 IP 地址。
<port>: 代理服务器端口号。
<username><password>: 如果代理服务器需要身份验证,这里设置用户名和密码。
<nonProxyHosts>: 一个逗号分隔的主机名模式列表,指定不使用代理的主机。例如,可以排除某些特定的主机名不通过代理访问。

4、服务器 (<servers>):

配置 Maven 使用的服务器信息,包括仓库服务器、身份验证等。可以配置多个仓库服务器和身份验证信息。这样做的主要目的是允许从不同的仓库获取依赖,并且这些仓库可能需要不同的身份验证。下面是一个示例,其中包含多个服务器的配置:

<servers><server><id>dev-repo</id><username>dev-user</username><password>dev-password</password></server><server><id>prod-repo</id><username>prod-user</username><password>prod-password</password></server><!-- 可以添加更多的服务器配置 -->
</servers>

<server> 元素定义了一个服务器配置,其中包括 <id>(用于唯一标识服务器)、<username>(用户名)和 <password>(密码)。

有两个 <server> 元素分别表示两个不同的服务器配置,其 <id> 分别为 dev-repoprod-repo
<id>在 Maven 中通常对应于 settings.xml 中 <servers> 部分的 <server> 元素的一个条目,也对应于项目的 <distributionManagement><repositories> 部分的 <id> 属性。

5、像仓库 (<pluginGroups>):

配置 Maven 使用的插件镜像仓库。

<pluginGroups><pluginGroup>com.example.plugins</pluginGroup>
</pluginGroups>

6、配置(<profiles>)**:

在 Maven 中,<profiles> 元素用于定义一组配置,这些配置可以根据不同的环境或需求进行选择性的激活。通过使用 profiles,你可以为项目定义不同的构建配置,并在构建时选择性地激活这些配置,以适应不同的场景。

一个简单的 <profiles> 示例可能如下所示:

<profiles><profile><id>dev</id><properties><environment>development</environment></properties></profile><profile><id>prod</id><properties><environment>production</environment></properties></profile>
</profiles>

在这个示例中,定义了两个 profiles:devprod。每个 profile 都有一个唯一的 <id> 用于标识,以及一组配置(在这里是 <properties> 元素)。这里使用了 <properties> 来设置一些属性,这些属性可以在项目中的其他地方引用。

要在构建过程中激活一个特定的 profile,可以使用 -P 选项:

mvn clean install -Pdev

这将激活 dev profile,并将 environment 属性设置为 development。如果不提供 -P 选项,Maven 将使用默认配置。通过使用 profiles,你可以根据需要灵活地定制项目的构建过程,使得同一份项目代码可以在不同的环境中以不同的方式构建。

  • <activation> 元素用于定义何时激活该 profile。可以根据多种条件来激活 profile,例如环境变量、操作系统、文件存在等。以下是一个示例:
  • <repositories> 元素用于在 profile 中定义特定的仓库配置。这允许你为每个 profile 定义不同的 Maven 仓库,以满足特定的构建需求。以下是一个示例:
<profiles><profile><id>dev</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><repositories><repository><id>dev-repo</id><url>https://dev.example.com/maven2</url></repository></repositories><!-- ... 其他配置 ... --></profile><profile><id>prod</id><repositories><repository><id>prod-repo</id><url>https://prod.example.com/maven2</url></repository></repositories><!-- ... 其他配置 ... --></profile>
</profiles>

<activeByDefault>true</activeByDefault> 表示 dev profile 将默认激活。这意味着如果用户没有显式指定其他 profile,Maven 将使用 dev profile 进行构建。

<jdk>1.8</jdk> 表示激活 dev profile 的条件之一是 JDK 版本为 1.8。这意味着只有在使用 JDK 1.8 时才会激活 dev profile。如果你在其他 JDK 版本下构建,将不会激活 dev profile。

dev profile 中定义了一个 Maven 仓库,其 <id>dev-repo,URL 为 https://dev.example.com/maven2。这是为了在 dev 环境中使用指定的 Maven 仓库。

prod profile 中定义了另一个 Maven 仓库,其 <id>prod-repo,URL 为https://prod.example.com/maven2。这是为了在 prod 环境中使用另一个 Maven 仓库。

这种配置允许你在不同的构建环境中使用不同的 Maven 仓库,并在特定条件下激活 dev profile。

三、总体而言

settings.xml 文件中的这些配置项可以根据项目的需求进行定制。在实际的 Maven 项目中,通过修改 settings.xml 文件,可以对 Maven 的行为进行全局的配置,从而满足项目的特定需求。

参考文件【maven官方文件】 https://maven.apache.org/ref/3.9.6/

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

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

相关文章

mac 生成 本地.ssh

输入下面命令行 ssh-keygen 默认回车得到下面的 Generating public/private rsa key pair. Enter file in which to save the key (/Users/{用户名}/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has be…

Azure 学习总结

文章目录 1. Azure Function1.1 Azure Function 概念1.2 Azure Function 实现原理1.3 Azure Function 本地调试1.4 Azure Function 云部署 2. Azure API Managment 概念 以及使用2.1 Azure API 概念2.2 Azure API 基本使用 3. Service Bus 应用场景及相关特性3.1 Service Bus 基…

京东商家数据工具讲解(一):竞品数据如何监控与分析

京东平台的店铺众多&#xff0c;同行数不胜数。作为商家&#xff0c;如果连自己竞争对手的情况都不知道的话&#xff0c;很难在这个平台存活下去。那么&#xff0c;这次鲸参谋就来重点说一下“竞品分析”。 竞品分析&#xff0c;主要是对京东店铺运营期间竞争对手的市场经营状…

使用Vite创建React + TypeScript(pro和mobile,含完整的空项目结构资源可供下载)

PC端 安装指令&#xff1a; npm create vitelatest react-ts-pro -- --template react-tsVite是一个框架无关的前端工具链&#xff0c;可以快速的生成一个React TS的开发环境&#xff0c;并且可以提供快速的开发体验说明&#xff1a; 1. npm create vitelatest固定写法&#…

【docker实战】02 用docker安装mysql

本示例采用bitnami的镜像进行安装MySQL 一、镜像搜索 先搜索一下mysql有哪些镜像 [rootlocalhost ~]# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql …

爬虫工作量由小到大的思维转变---<第二十九章 Scrapy的重试机制(避混淆)>

前言: 单纯讲重试的问题---因为今天有人私了我 他的代码,我忽然觉得这里有一个误区;顺便给哥们你混淆的理论里,再搅和搅和....哈哈哈 正文: 拨乱反正: 在Scrapy中&#xff0c;默认情况下&#xff0c;当一个请求失败时&#xff0c;会进行自动重试。重试次数的计算是基于原始请…

Android : 画布的使用 简单应用

示例图&#xff1a; MyView.java&#xff1a; package com.example.demo;import android.content.Context; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.Vi…

C++ 之LeetCode刷题记录(四)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅&#xff0c;多学多练&#xff0c;尽力而为。 先易后难&#xff0c;先刷简单的。 14. 最长公共前缀 编写一个函数来查找字符串数组中的最长公共…

建筑覆膜板和传统木板有什么不同?

在建筑领域&#xff0c;选择合适的模板材料对于确保施工质量和效率至关重要。近年来&#xff0c;建筑覆膜板因其独特的优势越来越受到青睐&#xff0c;与传统木板相比&#xff0c;它们在多个方面展现出显著的差异。 材料和制作工艺 建筑覆膜板&#xff1a;这种板材是由木材切片…

腾讯云轻量应用服务器详细介绍

腾讯云轻量应用服务器开箱即用、运维简单的轻量级云服务器&#xff0c;CPU内存带宽配置高并且价格特别优惠&#xff0c;轻量2核2G3M带宽62元一年、2核2G4M优惠价118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;756元3年、4核8G12M带宽646元15个月等&#xf…

【linux】touch的基本使用

碎碎念 刚接触linux时候的几个最基础的命令之一&#xff0c;用来创建文件。如果使用touch --help的时候会发现作者对于touch的简介&#xff1a;Update the access and modification times of each FILE to the current time.用于修改文件的访问和时间戳 带我的leader属于那种…

Linux安装GitLab教程

Linux安装GitLab教程 1、配置yum源 相当于新建一个文件&#xff0c;通过这个文件来安装gitlab vim /etc/yum.repos.d/gitlab-ce.repo 把这些配置粘进去 [gitlab-ce] nameGitlab CE Repository baseurlhttps://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/ gp…

TCP与UDP是流式传输协议吗?

TCP&#xff08;传输控制协议&#xff09;和UDP&#xff08;用户数据报协议&#xff09;是两种主要的传输层协议&#xff0c;它们用于在网络中传输数据。它们不是流式传输协议&#xff0c;而是提供了不同的数据传输特性&#xff1a; 1. TCP&#xff08;传输控制协议&#xff0…

C++ Qt开发:SqlTableModel映射组件应用

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍SqlTableModule组件的常用方法及灵活运用。 …

深入解析C语言中void (*signal(int ,void(*)(int) ) ) (int)

目录 深入解析C语言中的signal函数声明 1. signal函数声明 1.1 signal是一个函数 1.2 返回类型是一个函数指针 2. 函数指针的理解 3. 简化声明使用typedef 为啥不这么写typedef void (*)(int) acc&#xff1f; 代码&#xff1a; 结论 深入解析C语言中的signal函数声明…

编程笔记 html5cssjs 004 我的第一个页面

编程笔记 html5&css&js 004 我的第一个页面 一、基本结构二、HTML标签三、HTML元素四、HTML属性五、编写第一个网页六、使用VSCODE小结 开始编写网页&#xff0c;并且使用第一个网页成为一个母板&#xff0c;用于完成后续内容的学习。有一个基本要求&#xff0c;显示结…

二叉树数据结构:深入了解二叉树的概念、特性与结构

在探索栈和队列之后&#xff08;大家可以移步至我的数据结构专栏&#xff09;&#xff1a;T-rLN的数据结构专栏 我们转向了更为复杂而有趣的数据结构——二叉树。本文将引领我们进入二叉树的世界&#xff0c;从最基本的概念和结构开始&#xff0c;逐步深入了解二叉树的顺序结构…

C语言停车场模型详解

C语言停车场模型详解 1. 引言2. 代码概述3. 代码详解3.1 定义常量和数据结构3.2 初始化车库3.3 查找车辆所在车库3.4 查找车辆所在的车位3.5 打印车库状态3.6 打印等候车辆3.7 车辆入库3.8 车辆出库3.9 菜单功能3.10 主函数 5.效果展示5.完整代码6. 总结 1. 引言 本文将介绍一…

hyper-v ubuntu 3节点 k8s集群搭建

前奏 搭建一主二从的k8s集群&#xff0c;如图所示&#xff0c;准备3台虚拟机。 不会创建的同学&#xff0c;可以看我上上篇博客&#xff1a;https://blog.csdn.net/dawnto/article/details/135086252 和上篇博客&#xff1a;https://blog.csdn.net/dawnto/article/details/135…

(04730)半导体器件之基本放大器工作原理(三)

本文主要阐述多级与差动放大器 为使输入的微弱信号进行放大后能获得足够的输出功率去推动负载运行&#xff0c;往往要采用所谓的多级放大电路&#xff0c;信号逐级通过放大&#xff0c;直至得到输出信号。这就必须考虑放大电路级与级之间的信号传递方法&#xff0c;或者称为耦…