Maven 详细配置:Maven settings 配置文件的详细说明

Maven settings 配置文件是 Maven 环境的重要组成部分,它用于定义用户特定的配置信息和全局设置,例如本地仓库路径、远程仓库镜像、代理服务器以及认证信息等。settings 文件分为全局配置文件(settings.xml)和用户配置文件(用户目录下的 .m2/settings.xml),它们分别影响 Maven 的全局行为和当前用户的个性化配置。通过合理配置 settings 文件,开发者可以优化构建性能、提升依赖解析效率,并满足企业开发环境中的特殊需求。本篇内容将深入解析 settings 文件的结构和使用方法,帮助读者灵活定制 Maven 环境,提升项目开发效率和稳定性。


文章目录

      • 1、关于 Settings 配置文件
      • 2、Settings 顶级元素的详细介绍
        • 2.1、简单值元素
        • 2.2、插件组元素
        • 2.3、服务器配置元素
        • 2.4、镜像仓库元素
        • 2.5、代理元素
        • 2.6、构建配置元素
        • 2.7、激活的构建配置元素


1、关于 Settings 配置文件

在 Maven 官网,关于 Settings 配置文件说明:https://maven.apache.org/settings.html

settings.xml 文件中的 settings 元素包含了一些用于定义配置 Maven 执行方式的值,类似于 pom.xml,但这些配置不应绑定到任何特定项目,也不应该分发给其他用户。这些配置包括本地仓库的位置、备用的远程仓库服务器以及认证信息等。

settings.xml 文件可以存在的两个位置:

  1. Maven 安装目录:${maven.home}/conf/settings.xml
  2. 用户目录:${user.home}/.m2/settings.xml

第一个位置的 settings.xml 称为全局设置(Global Settings),第二个位置的 settings.xml 称为用户设置(User Settings)。如果两个文件同时存在,它们的内容会被合并,其中用户设置优先级更高。


2、Settings 顶级元素的详细介绍

下面是一份位于 POM 文件中 <settings> 元素下的元素列表(截图自官网):

image-20241120174151631

2.1、简单值元素

对于 Maven 的 Settings 文件来说,一半的顶级元素(Root Element)都是简单值元素,这些简单值用于描述构建系统中一些始终处于活跃状态的配置项。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd"><localRepository>${user.home}/.m2/repository</localRepository><interactiveMode>true</interactiveMode><usePluginRegistry>false</usePluginRegistry><offline>false</offline>...
</settings>

配置说明:

  • 顶级元素 localRepository:本地仓库。该值表示构建系统本地仓库的路径。其默认值为 ${user.home}/.m2/repository
  • 顶级元素 interactiveMode:Maven 是否需要和用户交互以获得输入。如果 Maven 需要和用户交互以获得输入,则设置成 true,反之则应为 false。其默认值为 true
  • 顶级元素 usePluginRegistryMaven 是否需要使用 plugin-registry.xml 文件来管理插件版本。如果设置为 true,则在{user.home}/.m2 下需要有一个 plugin-registry.xml 来对 plugin 的版本进行管理。默认为 false(该元素在 Maven 3 中已被废弃)
  • 顶级元素 offline:Maven 是否需要在离线模式下运行。如果构建系统需要在离线模式下运行,则为 true,反之则应为 false。当由于网络设置原因或者安全因素,构建服务器不能连接远程仓库的时候,该配置就十分有用。其默认值为 false
2.2、插件组元素

此元素包含一个 pluginGroup 元素的列表,每个 pluginGroup 元素包含一个 groupId。当在命令行中使用插件且未指定 groupId 时,Maven 会在这个列表中进行搜索。该列表默认已包含 org.apache.maven.pluginsorg.codehaus.mojo

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">...<pluginGroups><pluginGroup>org.apache.maven.plugins</pluginGroup><pluginGroup>org.codehaus.mojo</pluginGroup></pluginGroups>...
</settings>

配置说明:

  • 顶级元素 pluginGroups:当插件的组织 ID(groupId)没有显式提供时,供搜寻插件组织 ID(groupId)的列表。当我们使用某个插件,并且没有在命令行为其提供组织 ID(groupId)的时候,Maven 就会使用该列表。
  • 一级子元素 pluginGroup:插件的组织 ID(groupId)。
2.3、服务器配置元素

在 Maven 中,用于下载和部署的仓库通过 POM 文件中的 <repositories><distributionManagement> 元素进行定义。然而,某些敏感信息(如用户名和密码)不应该随 pom.xml 一起分发。这类信息应保存在 settings.xml 中,例如在构建服务器上使用的配置。

以下是一个 servers 配置示例:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">...<servers><server><id>server001</id><username>my_login</username><password>my_password</password><privateKey>${user.home}/.ssh/id_dsa</privateKey><passphrase>some_passphrase</passphrase><filePermissions>664</filePermissions><directoryPermissions>775</directoryPermissions><configuration></configuration></server></servers>...
</settings>

配置说明:

  • 顶级元素 servers:配置服务端的一些设置。一些设置如安全证书不应该和 pom.xml 一起分发。这种类型的信息应该存在于构建服务器上的 settings.xml 文件中 。
  • 一级子元素 server:服务器元素,包含配置服务器时需要的信息。
  • 二级子元素 id:服务器的 ID(注意不是用户登陆的 ID),该 id 与 POM 文件中 distributionManagement/repository 元素的 id 或 Settings 文件中 mirrors/mirror 元素的 id 相匹配。
  • 二级子元素 usernamepassword:鉴权用户名和鉴权密码,表示服务器认证所需要的登录名和密码。
  • 二级子元素 privateKeypassphrase:鉴权时使用的私钥位置和私钥密码。和前两个元素类似,私钥位置和私钥密码指定了一个私钥的路径(默认是 /home/hudson/.ssh/id_dsa)和可选的密钥短语。
  • 二级子元素 filePermissionsdirectoryPermissions:部署过程中创建的文件或目录的权限设置。这两个元素合法的值是一个三位数字,其对应了 unix 文件系统的权限。
  • 二级子元素 configuration:该元素用于定义服务器相关的其他配置(自定义配置,较少使用)。

PS(注意事项):① 从 Maven 2.1.0 开始,新增了服务器密码和密钥短语加密的功能,以增强安全性;② 如果使用私钥登录服务器,需要确保省略 password 元素,否则会导致私钥被忽略;③ 在需要同时访问多个远程仓库的项目中,通过 settings.xml 中的 <servers> 元素配置这些仓库的认证信息,避免将敏感信息暴露在 pom.xml 中。

2.4、镜像仓库元素

在 Maven 中,镜像仓库是一个远程仓库的映射仓库,通常用于加速依赖项的下载。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">...<mirrors><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror></mirrors>...
</settings>

配置说明:

  • 顶级元素 mirrors:为仓库列表配置的下载镜像列表。
  • 一级子元素 mirror:给定仓库的下载镜像。
  • 二级子元素 id:该镜像的唯一标识符。用来区分不同的 mirror 元素。
  • 二级子元素 name:镜像名称。
  • 二级子元素 url:该镜像的 URL。构建系统会优先考虑使用该 URL,而非使用默认的服务器 URL。
  • 二级子元素 id:被镜像的服务器的 ID。例如,如果我们要设置了一个 Maven 中央仓库(http://repo1.maven.org/maven2)的镜像,就需要将该元素设置成 central。这必须和中央仓库的 ID - central 完全一致。
2.5、代理元素

在 Maven 的 settings.xml 文件中,可以通过 proxies 元素配置代理服务器,用于在受限制的网络环境中访问外部仓库。

以下是一个 proxies 配置示例:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">...<proxies><proxy><id>myproxy</id><active>true</active><protocol>http</protocol><host>proxy.somewhere.com</host><port>8080</port><username>proxyuser</username><password>somepassword</password><nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts></proxy></proxies>...
</settings>

配置说明:

  • 顶级元素 proxies:用来配置不同的代理的列表。
  • 一级子元素 proxy:代理元素,包含配置代理时需要的信息。
  • 二级子元素 id:代理的唯一标识符,用于区分不同的代理配置。
  • 二级子元素 active:该代理是否是激活的那个。true 则激活代理。当我们声明了一组代理,而某个时候只需要激活一个代理的时候,该元素就可以派上用处。
  • 二级子元素 protocol:代理协议,例如 httphttps
  • 二级子元素 hostport:代理服务器的主机名或 IP 地址 和代理服务器的端口号。
  • 二级子元素 usernamepassword:代理认证所需的用户名和密码
  • 二级子元素 nonProxyHosts:不需要通过代理访问的主机列表。该列表的分隔符由代理服务器指定,例子中使用了竖线分隔符,使用逗号分隔也很常见。
2.6、构建配置元素

settings.xml 文件中的 profile 元素是 pom.xml 文件中 profile 元素的简化版。它仅包含以下几个元素,因为这些元素关注的是整个构建系统的配置,而不是单个项目的设置。

这些元素包括:activation(激活)、repositories(仓库)、pluginRepositories(插件仓库)、properties(属性)。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">...<profiles><profile><id>test</id><activation><activeByDefault>false</activeByDefault><jdk>1.5</jdk><os><name>Windows XP</name><family>Windows</family><arch>x86</arch><version>5.1.2600</version></os><property><name>mavenVersion</name><value>2.0.3</value></property><file><exists>${basedir}/file2.properties</exists><missing>${basedir}/file1.properties</missing></file><properties/><repositories/><pluginRepositories/></activation></profile>><activeProfiles><activeProfile>dev</activeProfile></activeProfiles></profiles>...
</settings>

配置说明:

  • 顶级元素 profiles:根据环境参数来调整构建配置的列表。

  • 一级子元素 profile:根据环境参数来调整的构件的配置。

  • 二级子元素 id:该配置的唯一标识符。

  • 二级子元素 activation:自动触发 Profile 的条件逻辑。

  • 三级子元素 activeByDefault:布尔标志,确定 Profile 是否默认处于活动状态。仅当没有其他配置文件通过命令行明确激活或通过其他激活器隐式激活时,才会评估此标志,否则无效。

  • 三级子元素 jdk:当匹配的 JDK 被检测到,Profile 被激活。例如,1.4 激活 JDK1.4,1.4.0_2,而 !1.4激活所有版本不是以 1.4 开头的 JDK。.

  • 三级子元素 os:当匹配的操作系统属性被检测到,Profile 被激活。os 元素可以定义一些操作系统相关的属性

  • 四级子元素 name:激活 Profile 的操作系统的名字。

  • 四级子元素 family:激活 Profile 的操作系统所属家族,如 Windows

  • 四级子元素 arch:激活 Profile 的操作系统体系结构。

  • 四级子元素 version:激活 Profile 的操作系统版本。

  • 三级子元素 property:如果 Maven 检测到某一个属性(其值可以在 POM 中通过 ${名称} 引用),其拥有对应的名称和值,Profile 就会被激活。

  • 四级子元素 name:激活 Profile 的属性的名称

  • 四级子元素 value:激活 Profile 的属性的值

  • 三级子元素 file:提供一个文件名,通过检测该文件的存在或不存在来激活 Profile。

  • 四级子元素 exists:检查文件是否存在,如果存在则激活 Profile。

  • 四级子元素 missing:检查文件是否存在,如果不存在则激活 Profile。

  • 二级子元素 properties:同 POM 文件中的顶级元素 properties

  • 二级子元素 repositories:同 POM 文件中的顶级元素 repositories

  • 二级子元素 pluginRepositories:同 POM 文件中的顶级元素 pluginRepositories

  • 二级子元素 activeProfiles:定义每个 Profile 内部是否有特定的 Profile 需要激活。这样可以在某些特定的构建配置中嵌套其它的激活配置。

  • 三级子元素 activeProfile:被嵌套激活的 Profile 的 ID。

2.7、激活的构建配置元素

在 Maven 的 settings.xml 文件中,activeProfiles 元素用于指定在构建时要激活的 Maven 配置元素。它允许你在不同的构建环境中自动激活特定的 Profile,而不需要在命令行或 POM 文件中手动指定。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">...<activeProfiles><activeProfile>dev</activeProfile><activeProfile>prod</activeProfile></activeProfiles>...
</settings>

配置说明:

  • 顶级元素 activeProfiles:包含一组 activeProfile 元素,用于声明激活的 Profile 列表。
  • 一级子元素 activeProfile:每个 activeProfile 元素的值对应一个 Profile 的 id。这个 id 必须与 pom.xmlprofile.xml 中定义的 Profile 的 id 相匹配。

PS(注意事项):将 Profile 激活放在 settings.xml 中,可以确保在所有 Maven 构建中使用相同的 Profile,而不必在每个 POM 文件中显式指定。这对于需要一致性和统一配置的团队非常有用。

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

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

相关文章

【Uniapp-Vue3】image媒体组件属性

如果我们想要在页面上展示图片就需要使用到image标签。 这部分最重要的是图片的裁剪&#xff0c;图片的裁剪和缩放属性&#xff1a; mode 图片裁剪、缩放的模式 默认值是scaleToFill 我将用两张图片对属性进行演示&#xff0c;一张是pic1.jpg&#xff08;宽更长&#xf…

http源码分析

一、HttpURLConnection http连接池源码分析 二、HttpClient 连接池&#xff0c;每个路由最大连接数 三、OkHttp okhttp的连接池与socket连接

接口开发完后,个人对于接下来接口优化的一些思考

优化点 入参的合法性和长度范围&#xff0c;必填项的检查验证 因为没有入参&#xff0c;所以不需要考虑。 批量思想解决N1问题 // 假设要查询100个订单及其对应的用户信息 List<Order> orders orderMapper.selectList(new QueryWrapper<>().last("limit …

运动相机拍摄的视频打不开怎么办

3-10 GoPro和大疆DJI运动相机的特点&#xff0c;小巧、高清、续航长、拍摄稳定&#xff0c;很多人会在一些重要场合用来拍摄视频&#xff0c;比如可以用来拿在手里拍摄快速运动中的人等等。 但是毕竟是电子产品&#xff0c;有时候是会出点问题的&#xff0c;比如意外断电、摔重…

STM32-BKP备份寄存器RTC实时时钟

一、原理 Unix&#xff1a; 一些系统是使用32bit有符号数存储&#xff0c;实际范围为-2,147,483,648到2,147,483,647‌即~ 经过计算int32数据会在2038年1月19日溢出&#xff0c;可以看到转换的为北京时间。 STM32的时间戳为无符号时间戳。 我们需要把秒计数器的时间通过计算…

Docker图形化界面工具Portainer最佳实践

前言 安装Portainer 实践-基于Portainer安装redis-sentinel部署 Spring Boot集成Redis Sentinel 前言 本篇文章笔者推荐一个笔者最常用的docker图形化管理工具——Portainer。 安装Portainer 编写docker-compose文件 Portainer部署的步骤比较简单&#xff0c;我们还是以…

行业商机信息付费小程序系统开发方案

行业商机信息付费小程序系统&#xff0c;主要是整合优质行业资源&#xff0c;实时更新的商机信息。在当今信息爆炸的时代&#xff0c;精准、高效地获取行业商机信息对于企业和个人创业者而言至关重要。 一、使用场景 日常浏览&#xff1a;用户在工作间隙或闲暇时间&#xff0c…

基于Matlab的变压器仿真模型建模方法(13):单相升压自耦变压器的等效电路和仿真模型

1.单相升压自耦变压器的基本方程和等效电路 单相升压自耦变压器的接线原理图如图1所示。在建立自耦变压器的基本方程时,仍然把它看成是从双绕组变压器演变而来。在图1中,设节点a到节点b部分的绕组的匝数为,对应于双绕组变压器的原边绕组;节点c到节点a部分的绕组的绕组匝数为…

Java最新面试题(全网最全、最细、附答案)

一、Java基础 1、基础概念与常识Java 语言有哪些特点? 简单易学&#xff08;语法简单&#xff0c;上手容易&#xff09;&#xff1b;面向对象&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff1b;平台无关性&#xff08; Java 虚拟机实现平台无关性&a…

【简博士统计学习方法】3. 统计学习方法的三要素

3. 统计学习方法的三要素 3.1 监督学习的三要素 3.1.1 模型 假设空间&#xff08;Hypothesis Space&#xff09;&#xff1a;所有可能的条件概率分布或决策函数&#xff0c;用 F \mathcal{F} F表示。 若定义为决策函数的集合&#xff1a; F { f ∣ Y f ( X ) } \mathcal{F…

C# 修改项目类型 应用程序程序改类库

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

链上数据分析基础课:Puell倍数(Puell Multiple)

PUELL倍数&#xff08;Puell Multiple&#xff09;就是每日币发行金额除以365天的移动平均 每日币发行总额&#xff0c;简单说就是每天结算的币总量和过去一年的平均每天收成的比。这个指标能让我们大概了解矿工的收益情况&#xff0c;还能从矿工的角度看市场趋势和周期变化。 …

初学STM32 --- USMART

目录 USMART简介 USMART主要特点&#xff1a; USMART原理 USMART组成&#xff1a; USMART 的实现流程简单概括 USMART扫描函数&#xff1a; USMART系统命令 USMART移植 USMART简介 USMART是一个串口调试组件&#xff0c;可以大大提高代码调试效率&#xff01; USMART主…

对话|企业如何构建更完善的容器供应链安全防护体系

对话&#xff5c;企业如何构建更完善的容器供应链安全防护体系 云布道师 随着云计算和 DevOps 的兴起&#xff0c;容器技术和自动化成为软件开发中的必要手段&#xff0c;软件供应链也进入了自动化及 CI/CD 阶段。然而&#xff0c;容器技术和自动化虽然提升了软件的更新速度&…

Backend - EF Core(C# 操作数据库 DB)

目录 一、EF Core 1. 使用的ORM框架&#xff08;对象关系映射&#xff09; 2. EFCore 常见两种模式 3. EFCore 提供程序 二、 EF 操作数据库&#xff08;Code First&#xff09; 1. 下载NuGet插件 2.创建模型类文件 3.创建DBContext文件 4.Programs.cs文件 5.appsettings.Devel…

科研绘图系列:R语言单细胞数据常见的可视化图形

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理图1图2图3图4图5图6系统信息参考介绍 单细胞数据常见的可视化图形 因为本教程是单细胞数据,因此运行本画图脚本需要电脑的内存最少32Gb 加载…

jenkins入门7 --发送邮件1

jenkins发送邮件配置&#xff08;全局配置&#xff09;_jenkins 怎么发送邮件-CSDN博客 本文通过163发送邮件 1、首先163设置选择pop3/smtp/imap,开启服务&#xff0c;获取授权码 2、jenkins下载邮件插件 登录Jenkins管理界面&#xff0c;点击“Manage Jenkins”。 选择“Man…

30、论文阅读:基于小波的傅里叶信息交互与频率扩散调整的水下图像恢复

Wavelet-based Fourier Information Interaction with Frequency Diffusion Adjustment for Underwater Image Restoration 摘要介绍相关工作水下图像增强扩散模型 论文方法整体架构离散小波变换与傅里叶变换频率初步增强Wide Transformer BlockSpatial-Frequency Fusion Block…

衡量算法效率的方法:时间复杂度、空间复杂度

衡量算法效率的方法&#xff1a;时间复杂度、空间复杂度 一、好算法的特点二、算法效率分析1. 时间复杂度2. 空间复杂度 一、好算法的特点 算法是用数学解决问题的方法。一个好算法有以下几个特点&#xff1a; ①正确性&#xff1a;能正确处理各种输入&#xff08;合法输入、非…

go如何从入门进阶到高级

针对Go语言的学习&#xff0c;不同阶段应采取不同的学习方式&#xff0c;以达到最佳效果.本文将Go的学习分为入门、实战、进阶三个阶段&#xff0c;下面分别详细介绍 一、社区 Go语言中文网 作为专注于Go语言学习与推广的平台&#xff0c;Go语言中文网为开发者提供了丰富的中…