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 文件中显式指定。这对于需要一致性和统一配置的团队非常有用。

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

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

相关文章

【C++】18.继承

文章目录 1.继承的概念及定义1.1 继承的概念1.2 继承定义1.2.1定义格式1.2.2继承关系和访问限定符1.2.3继承基类成员访问方式的变化 1.3 继承类模板 2.基类和派生类对象赋值转换3.继承中的作用域3.1 隐藏规则&#xff1a;3.2 考察继承作用域相关选择题 4.派生类的默认成员函数4…

声音是如何产生的

一、音频概述 RTMP中一般音频采用aac编码&#xff0c;采样率为44100HZ, 每帧1024采样&#xff0c;帧率43&#xff0c;23.2ms一帧 RTC中一般音频采用opus编码&#xff0c;采样率为48000HZ&#xff0c;每帧480采样&#xff0c;帧率100&#xff0c;10ms一帧 通道数&#xff08;c…

什么是中间件中间件有哪些

什么是中间件&#xff1f; 中间件&#xff08;Middleware&#xff09;是指在客户端和服务器之间的一层软件组件&#xff0c;用于处理请求和响应的过程。 中间件是指介于两个不同系统之间的软件组件&#xff0c;它可以在两个系统之间传递、处理、转换数据&#xff0c;以达到协…

问题清除指南|关于num_classes与 BCELoss、BCEWithLogitsLoss 和 CrossEntropyLoss 的关系

前言&#xff1a;关于「 num_classes 1 」引发的探究。 2024年尾声&#xff0c;学弟问到一个问题&#xff1a;在研究工作 CNNDetection 的github开源代码 networks/trainer.py 文件的 line 27 self.model resnet50(num_classes1) 中&#xff0c;变量 num_classes 的值为1&…

FinDKG: 用于检测金融市场全球趋势的动态知识图谱与大型语言模型

“FinDKG: Dynamic Knowledge Graphs with Large Language Models for Detecting Global Trends in Financial Markets” 论文地址&#xff1a;https://arxiv.org/pdf/2407.10909 摘要 动态知识图&#xff08;DKG&#xff09;能够表示对象间随时间变化的关系&#xff0c;适用于…

Robot---奇思妙想轮足机器人

1 背景 传统机器人有足式、轮式、履带式三种移动方式&#xff0c;每种移动方式都有各自的优缺点。轮式机器人依靠车轮在地面上移动&#xff0c;能源利用率高、移动速度快&#xff0c;但是仅以轮子与地面接触&#xff0c;缺乏越障能力和对复杂地形的适应能力&#xff0c;尤其面对…

高效工作流:用Mermaid绘制你的专属流程图;如何在Vue3中导入mermaid绘制流程图

目录 高效工作流&#xff1a;用Mermaid绘制你的专属流程图 一、流程图的使用场景 1.1、流程图flowChart 1.2、使用场景 二、如何使用mermaid画出优雅的流程图 2.1、流程图添加图名 2.2、定义图类型与方向 2.3、节点形状定义 2.3.1、规定语法 2.3.2、不同节点案例 2.…

.NET框架用C#实现PDF转HTML

HTML作为一种开放标准的网页标记语言&#xff0c;具有跨平台、易于浏览和搜索引擎友好的特性&#xff0c;使得内容能够在多种设备上轻松访问并优化了在线分享与互动。通过将PDF文件转换为HTML格式&#xff0c;我们可以更方便地在浏览器中展示PDF文档内容&#xff0c;同时也更容…

Tableau数据可视化与仪表盘搭建-可视化原则及BI仪表盘搭建

目录 可视化原则 BI仪表盘搭建 仪表盘搭建原则 明确仪表盘主题 仪表盘主题拆解 开发设计工作表 经营情况总览&#xff1a;突出显示的文字 经营数据详情&#xff1a;表格 每日营收数据&#xff1a;多轴折线图 每日流量数据&#xff1a;双轴组合图 新老客占比&#xf…

AIA - APLIC之三(附APLIC处理流程图)

本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 APLIC复位 APLIC复位后,其所有状态都变得有效且一致,但以下情况除外: 每个中断域的domaincfg寄存器(spec第 4.5.1 节);可能是machine-level interrupt domain的MSI地址配置寄存器(spec第4.5.3 和4.5…

unity学习5:创建一个自己的3D项目

目录 1 在unity里创建1个3D项目 1.1 关于选择universal 3d&#xff0c;built-in render pipeline的区别 1.2 创建1个universal 3d项目 2 打开3D项目 2.1 准备操作面板&#xff1a;操作界面 layout,可以随意更换 2.2 先收集资源&#xff1a;打开 window的 AssetStore 下载…

AI赋能跨境电商:魔珐科技3D数字人破解出海痛点

跨境出海进入狂飙时代&#xff0c;AI应用正在深度渗透并重塑着跨境电商产业链的每一个环节&#xff0c;迎来了发展的高光时刻。生成式AI时代的大幕拉开&#xff0c;AI工具快速迭代&#xff0c;为跨境电商行业的突破与飞跃带来了无限可能性。 由于跨境电商业务自身特性鲜明&…

我用Ai学Android Jetpack Compose之Text

这篇开始学习各种UI元素&#xff0c;答案来自 通义千问&#xff0c;通义千问没法生成图片&#xff0c;图片是我补充的。 下述代码只要复制到第一个工程&#xff0c;做一些import操作&#xff0c;一般import androidx.compose包里的东西&#xff0c;即可看到预览效果。完整工程代…

HashMap总结使用+原理+面试

文章目录 1.Hashmap的基本使用创建hashmap对象。遍历hashmap统计字母出现的次数用来投票计算返回JSON数据 2.hashmap源码阅读put源码阅读 3. HashMap 面试题目hashmap实现的原理什么时候数组需要进行扩容hashmap怎么确定把数据放到那个节点的哪个位置。为什么用 n - 1 与运算&a…

JS中函数基础知识之查漏补缺(写给小白的学习笔记)

函数 函数是ECMAScript中 最有意思的部分之一, 主要是因为函数实际上是对象.-- 每个函数 都是Function类型的实例,Function也有属性和方法. 因为函数是对象,所以函数名就是指向函数对象的指针. 常用的定义函数的语法: ①函数声明 ②函数表达式 ③箭头函数 function sum (n…

Skyeye 云 VUE 版本 v3.15.3 发布,涉及 ERP、OA、财务等

Skyeye 云智能制造&#xff0c;采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程&#xff0c;CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…

LInux单机安装Redis

1. 安装gee工具包 由于Redis是基于c语言编写的所以安装的时候需要先安装gee以及gcc的依赖,yum云用不了可以看一下这个 linux 替换yum源镜像_更换yum镜像源-CSDN博客 yum install -y gcc tcl 2. 添加redis的压缩包 3. 上传到Linux 上传到 /usr/local/src 目录、这个目录一般用于…

热备份路由HSRP及配置案例

✍作者&#xff1a;柒烨带你飞 &#x1f4aa;格言&#xff1a;生活的情况越艰难&#xff0c;我越感到自己更坚强&#xff1b;我这个人走得很慢&#xff0c;但我从不后退。 &#x1f4dc;系列专栏&#xff1a;网路安全入门系列 目录 一&#xff0c;HSRP的相关概念二&#xff0c;…

java开发springoot

阅读理解 命令之间空一行&#xff1a;表示前面的是配置 红色背景&#xff1a;表示待验证蓝色背景&#xff1a;表示常用或推荐绿色背景&#xff1a;注意/推荐 json 转 对象 import com.fasterxml.jackson.databind.ObjectMapper; public DebangResp convertJsonToObject(Stri…

gesp(C++一级)(17)洛谷:B4062:[GESP202412 一级] 温度转换

gesp(C一级)&#xff08;17&#xff09;洛谷&#xff1a;B4062&#xff1a;[GESP202412 一级] 温度转换 题目描述 小杨最近学习了开尔文温度、摄氏温度和华氏温度的转换。令符号 K K K 表开尔文温度&#xff0c;符号 C C C 表摄氏温度&#xff0c;符号 F F F 表华氏温度&am…