当前位置: 首页 > news >正文

Maven 的 settings.xml详解

Maven 的 settings.xml 是 Maven 的核心配置文件之一,用于定义 Maven 的全局或用户级行为,例如仓库地址、认证信息、代理设置、环境变量等。它通常位于以下两个位置:

  • ​全局配置​​:${M2_HOME}/conf/settings.xml(影响所有用户)
  • ​用户配置​​:${USER_HOME}/.m2/settings.xml(仅当前用户生效,优先级高于全局配置)

以下是 settings.xml 的详细说明,按功能模块分类讲解:

一、基础配置

1. <localRepository>:本地仓库路径

定义 Maven 本地仓库的存储位置(默认:~/.m2/repository)。
​作用​​:所有下载的依赖、上传的构件都会存储在此目录。
​示例​​:

<localRepository>/path/to/my/local/repo</localRepository>
2. <interactiveMode>:交互模式

布尔值(true/false),默认 true
​作用​​:当 Maven 需要用户输入时(如确认覆盖文件),是否启用交互式提示。
​示例​​:

<interactiveMode>true</interactiveMode>
3. <offline>:离线模式

布尔值(true/false),默认 false
​作用​​:若设为 true,Maven 不会尝试连接远程仓库,仅使用本地仓库的依赖。
​适用场景​​:网络不稳定时临时离线构建。
​示例​​:

<offline>false</offline>

二、远程仓库与镜像配置

1. <mirrors>:镜像仓库

定义远程仓库的镜像,用于加速下载或替换默认仓库(如中央仓库)。
​核心属性​​:

  • id:镜像的唯一标识(需唯一)。
  • name:镜像的描述名称。
  • url:镜像仓库的地址(如阿里云镜像)。
  • mirrorOf:指定要镜像的目标仓库(支持通配符):
    • *:镜像所有仓库请求。
    • central:仅镜像 Maven 中央仓库(idcentral 的仓库)。
    • external-repo-id:镜像指定 id 的远程仓库。

​常见场景​​:用阿里云镜像替代 Maven 中央仓库(加速国内下载)。
​示例​​:

<mirrors><!-- 阿里云公共仓库镜像 --><mirror><id>aliyunmaven</id><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url><mirrorOf>*</mirrorOf> <!-- 镜像所有仓库请求 --></mirror>
</mirrors>
2. <profiles>:环境配置集

定义不同环境(如开发、测试、生产)的仓库地址、插件仓库或属性,通过 <activation> 激活生效。

(1)<repository>:远程仓库声明

定义项目依赖的远程仓库地址(覆盖 pom.xml 中的 <repositories>)。
​核心属性​​:

  • id:仓库唯一标识(需与 <servers> 中的认证 id 匹配,否则无法下载私有构件)。
  • name:仓库描述。
  • url:仓库地址(如 Nexus 私服:http://nexus.example.com/repository/maven-public/)。
  • releases/snapshots:控制是否启用该仓库的发布版/快照版依赖(可选)。
    示例:
    <releases><enabled>true</enabled> <!-- 启用发布版 --><updatePolicy>never</updatePolicy> <!-- 更新策略:never(不更新)、daily(每日)、interval:X(X分钟) --><checksumPolicy>warn</checksumPolicy> <!-- 校验和策略:ignore(忽略)、fail(失败)、warn(警告) -->
    </releases>
    <snapshots><enabled>true</enabled> <!-- 启用快照版 -->
    </snapshots>
(2)<pluginRepositories>:插件仓库声明

定义 Maven 插件的远程仓库地址(覆盖 pom.xml 中的 <pluginRepositories>),用法同 <repository>

(3)<activation>:激活条件

定义 profile 何时生效(如 JDK 版本、操作系统、属性值等)。
​常见激活方式​​:

  • ​JDK 版本​​:<jdk>1.8</jdk>(匹配 JDK 1.8 及以上)。
  • ​操作系统​​:<os><name>Windows</name></os>(匹配 Windows 系统)。
  • ​文件存在性​​:<file><exists>path/to/file</exists></file>(文件存在时激活)。
  • ​属性值​​:<property><name>env</name><value>prod</value></property>(系统属性 env=prod 时激活)。
  • ​默认激活​​:<activeByDefault>true</activeByDefault>(无其他激活条件时生效)。

​示例:多环境 Profile​

<profiles><!-- 开发环境 --><profile><id>dev</id><activation><activeByDefault>true</activeByDefault> <!-- 默认激活 --><jdk>11</jdk></activation><repositories><repository><id>dev-nexus</id><url>http://nexus.example.com/repository/dev/</url></repository></repositories></profile><!-- 生产环境 --><profile><id>prod</id><activation><property><name>env</name><value>prod</value> <!-- 执行 mvn 命令时添加 -Denv=prod 激活 --></property></activation><repositories><repository><id>prod-nexus</id><url>http://nexus.example.com/repository/prod/</url></repository></repositories></profile>
</profiles>

三、服务器认证(<servers>

定义远程仓库的认证信息(如私服的用户名/密码),用于部署构件(mvn deploy)或访问需要认证的仓库。

​核心规则​​:serverid 必须与 pom.xml<distributionManagement><repositories> 中的仓库 id 完全一致。

​示例​​:

<servers><!-- 私服发布仓库认证 --><server><id>nexus-releases</id> <!-- 与 pom.xml 中 repository 的 id 一致 --><username>admin</username> <!-- 私服用户名 --><password>123456</password> <!-- 私服密码 --></server><!-- 私服快照仓库认证 --><server><id>nexus-snapshots</id><username>admin</username><password>123456</password></server>
</servers>

四、代理配置(<proxies>

当需要通过代理服务器访问互联网时,配置代理信息(如公司内网需要通过 HTTP 代理访问外网)。

​核心属性​​:

  • id:代理唯一标识。
  • active:是否启用(true/false)。
  • protocol:代理协议(如 httphttpssocks)。
  • host:代理服务器地址。
  • port:代理端口(如 8080)。
  • nonProxyHosts:绕过代理的主机列表(用 | 分隔,支持通配符 *)。

​示例​​:

<proxies><proxy><id>http-proxy</id><active>true</active><protocol>http</protocol><host>proxy.example.com</host><port>8080</port><nonProxyHosts>localhost|*.example.com</nonProxyHosts> <!-- 这些主机不通过代理 --></proxy>
</proxies>

五、环境变量与属性(<properties>

定义全局变量,供 pom.xml 或其他配置使用(类似 Maven 的 ${property.name} 占位符)。

​常见用途​​:

  • 统一管理版本号(如 spring.version=5.3.0)。
  • 定义路径变量(如 project.build.dir=./target)。
  • 传递系统属性(如 java.home)。

​示例​​:

<properties><!-- 自定义属性 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target><!-- 依赖版本统一管理 --><spring.version>5.3.23</spring.version><junit.version>5.8.2</junit.version>
</properties>

pom.xml 中使用:

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency>
</dependencies>

六、其他高级配置

1. <pluginGroups>:插件组

定义插件组的前缀,简化插件调用(适用于非标准 Maven 插件)。
​示例​​:

<pluginGroups><pluginGroup>com.example.plugins</pluginGroup> <!-- 插件组前缀 -->
</pluginGroups>
<!-- 调用时使用前缀:插件名 -->
<plugin><groupId>com.example.plugins</groupId><artifactId>my-plugin</artifactId><version>1.0.0</version>
</plugin>
2. <servers><distributionManagement> 的关系
  • <servers> 中的 id 对应 <distributionManagement><repository><snapshotRepository>id
  • 当执行 mvn deploy 时,Maven 会根据构件的类型(发布版/快照版)选择对应的仓库,并使用 <servers> 中的认证信息。

七、完整示例(用户级 settings.xml)

以下是一个典型的用户级 settings.xml 配置,包含镜像、Profile、代理和认证:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 http://maven.apache.org/xsd/settings-1.2.0.xsd"><!-- 本地仓库路径 --><localRepository>/Users/yourname/.m2/my-repo</localRepository><!-- 镜像:阿里云公共仓库 --><mirrors><mirror><id>aliyunmaven</id><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url><mirrorOf>*</mirrorOf></mirror></mirrors><!-- 代理配置(公司内网需要) --><proxies><proxy><id>http-proxy</id><active>true</active><protocol>http</protocol><host>proxy.company.com</host><port>8080</port><nonProxyHosts>localhost|*.company.com</nonProxyHosts></proxy></proxies><!-- 多环境 Profile --><profiles><profile><id>dev</id><activation><activeByDefault>true</activeByDefault></activation><repositories><repository><id>dev-nexus</id><url>http://nexus.company.com/repository/dev/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories></profile><profile><id>prod</id><activation><property><name>env</name><value>prod</value></property></activation><repositories><repository><id>prod-nexus</id><url>http://nexus.company.com/repository/prod/</url><releases><enabled>true</enabled></releases></repository></repositories></profile></profiles><!-- 私服认证 --><servers><server><id>dev-nexus</id><username>dev-user</username><password>dev-pass</password></server><server><id>prod-nexus</id><username>prod-user</username><password>prod-pass</password></server></servers></settings>

总结

settings.xml 是 Maven 的核心配置文件,主要用于:

  • 管理本地仓库位置。
  • 配置远程仓库镜像(加速下载)。
  • 定义多环境(开发/测试/生产)的依赖源。
  • 配置代理访问互联网。
  • 存储私有仓库的认证信息。
  • 统一管理全局属性(如版本号、编码)。

合理配置 settings.xml 可以显著提升构建效率,避免依赖下载慢、认证失败等问题。建议将个性化配置放在用户级 settings.xml${USER_HOME}/.m2/settings.xml),避免影响全局环境。

http://www.lryc.cn/news/571148.html

相关文章:

  • 深度学习中常见的激活函数分析
  • Android Studio Jetpack Compose毛玻璃特效按钮
  • 【数据结构】栈和队列详解
  • 线性放大器设计方案:248-双极性任意波1M带宽400Vpp高压线性放大器
  • 欧拉安装vboxlinuxadditions时,出错
  • 第九章——8天Python从入门到精通【itheima】-95~96-Python的异常模块与包(自定义模块并导入+自定义Python包)
  • MySQL 命令行的核心操作命令详解
  • 资深Java工程师的面试题目(一)微服务
  • 如何高效分享WordPress博客文章
  • Sparse4D: 稀疏范式的端对端融合
  • (100)课126: 间隙锁临键锁,是为了锁定索引B+树里叶节点之间的间隙,不允许别的事务在这些间隙里插入新的叶节点,从而阻止幻读
  • 振动测控模块设计原理图:276-16路AD、10路DA嵌入式振动测控模块
  • 自然语言处理文本分类
  • Node.js 项目启动命令全面指南:从入门到精通(术语版)
  • Redis中的分布式锁之SETNX底层实现
  • vue3 watch监视详解
  • 最简单的远程桌面连接方法是什么?系统自带内外网访问实现
  • 基于Cesium的倾斜切片/模型位置方位调整工具
  • Android多媒体——MediaCodec回调与配置(二十五)
  • Android App启动流程深度解析(一):从Activity.startActivity开始
  • 常用交易所链接
  • 【PmHub面试篇】PmHub分布式事务Seata保证任务审批状态一致性面试专题解析
  • fd查找文件并拷贝
  • 【启发式算法】RRT算法详细介绍(Python)
  • OSPF 配置全攻略:从基础原理到实战演练
  • python 重要地位
  • UE/Unity/Webgl云渲染推流网址,如何与外部网页嵌套和交互?
  • 答题考试系统小程序ThinkPHP+UniApp
  • NLP学习路线图(五十一):PyTorch/TensorFlow
  • 用C语言实现面向对象思想编写驱动层--以驱动LED为例