MAVEN setting.xml配置文件详解

本文详细解读了settings.xml文件在Maven中的关键作用,包括配置本地仓库、代理设置、服务器认证、远程仓库镜像、环境差异文件和插件管理。掌握这些有助于有效管理项目依赖和部署过程。

1、setting.xml文件位置

  • 用户配置:${USER.HOME}/.m2/settings.xml
  • 全局配置:${MAVEN_HOME}/conf/settings.xml
  • 注意:用户配置优于全局配置,默认使用的是用户配置

2、setting.xml文件作用

  • 用于配置代理、远程仓库镜像、jar包部署服务器等信息

setting.xml配置项

配置项说明
localRepository本地仓库,默认为${USER.HOME}/.m2/repository
interactiveMode交互模式,默认为true
usePluginRegistry是否使用plugin是否使用plugin-registry.xml文件管理插件版本,默认为false
offline是否使用离线模式,默认为false
proxies/proxy*配置代理,通知给无法访问远程仓库的用户使用
servers/server*服务器身份认证,比如当deploy一个包到远程仓库时,需要权限认证
repositories/repository*用于配置远程仓库信息
mirrors/mirror*远程仓库镜像配置,会覆盖远程仓库
profiles/profile*用于配置不同环境的差异文件
activeProfiles/activeProfile*手动激活的默认差异文件
pluginGroups/pluginGroup*当插件的groupId没有显式提供,从此插件的group中寻找需要的插件

详细配置说明

  • 代理(proxies/proxy*):
<proxies>
        <proxy>
            <!-- 代理标识 -->
            <id>testProxy</id>
            <!-- 是否激活,默认是true -->
            <active>true</active>
            <!-- 代理协议 -->
            <protocol>http</protocol>
            <!-- 用户名 -->
            <username>wang</username>
            <!-- 密码 -->
            <password>123</password>
            <!-- 端口 -->
            <port>8099</port>
            <!-- 主机 -->
            <host>proxy.xxx.com</host>
            <!-- 不需要代理的主机 -->
            <nonProxyHosts>*.xx1.com|*.xx2.com</nonProxyHosts>
        </proxy>
</proxies>
  • 服务器认证(servers/server*):支持用户名/密码,公钥/私钥两种认证方式
<servers>
        <server>
            <!-- 服务标识 -->
            <id>server1</id>
            <!-- 用户名 -->
            <username>wang</username>
            <!-- 密码 -->
            <password>123</password>
        </server>
        <server>
            <id>server2</id>
            <privateKey>wang</username>
            <passphrase>456</passphrase>
        </server>
</servers>
  • 镜像(mirrors/mirror*):用配置覆盖一个或者多个仓库的配置
  • <mirrorOf>元素:
    • *= everything
    • external:* = everything not on the localhost and not file based.
    • repo,repo1 = repo or repo1
    • *,!repo1 = everything except repo1
<mirrors>
        <mirror>  
            <!-- 镜像id,唯一标识 -->      
            <id>central-mirror</id>
            <!-- 镜像名称 -->
            <name>Maven China Mirror</name>
            <!-- 镜像地址 -->        
            <url>http://search.maven.org/#browse</url>    
            <!-- 这个是谁的镜像,覆盖哪个仓库的配置 -->    
            <mirrorOf>central</mirrorOf>        
        </mirror> 
</mirrors>
  • 环境差异文件(profiles/profile*):
<profiles>
        <!--通过某些条件匹配来激活不同<profile>,如jdk、os、属性和属性值等等-->
        <profile>
            <!-- 唯一标识id -->
            <id>jdk-1.6</id>
            <!-- 激活条件 -->
            <activation>
                <jdk>1.6</jdk>
            </activation>
            <!-- 键值对属性 -->
            <properties>
                <property.key>property.value</property.key>
         <!--
            maven支持使用占位符的方式设置或获取值
            1.env:操作系统环境变量
            2.project.x:当前project的属性
            3.setttings.x:对应settings.xml文件的属性
            4.properties文件中的属性(redis.ip=10.11.12.13):redis.ip
            5.x:<properties>中设置的属性
          -->
                <anykey>${env.path}</anykey>
			</properties>
            <!-- 仓库配置 -->
            <repositories>
                <repository>   
                    <id>仓库id</id>    
                    <name>仓库名称</name>
                    <url>仓库url</url>
                    <layout>在Maven 2/3中都是default,只有在Maven 1.x中才是legacy,默认也是default</layout>
                    <!-- 发布的稳定版本 -->
                    <releases>
                        <checksumPolicy>当组件校验失败时,warn或fail</checksumPolicy>
                        <enabled>是否使用此库下载组件</enabled>
                        <updatePolicy>当组件在本地不存在时的更新策略:always、daily(default)、interval:xx(in minutes)、never</updatePolicy>
                    </releases>
                    <!-- 快照版本,注释同上 -->
                    <snapshots>
                        <checksumPolicy></checksumPolicy>
                        <enabled></enabled>
                        <updatePolicy></updatePolicy>
                    </snapshots>
                </repository>
            </repositories>
            <!-- 插件仓库 -->
            <pluginRepositories>
                <pluginRepository>
                    <!-- 配置与repository类似 -->
                </pluginRepository>
            </pluginRepositories>
        </profile>
</profiles>
<!--激活某个差异文件(activeProfiles/activeProfile*)-->
<!-- 指定某个profile生效 -->
<activeProfiles>
    <activeProfile>对应profile id</activeProfile>
</activeProfiles>
  • 当插件groupId没有显示提供,使用此groupId进行查找(pluginGroups/pluginGroup*):
<pluginGroups>
        <!-- 当插件groupId没有显示提供,使用此groupId查找插件 -->
        <!-- 官网:(Many) List of groupIds to search for a plugin when that plugin groupId is not explicitly provided. -->
        <pluginGroup>org.mortbay.jetty</pluginGroup>
        <pluginGroup>org.codehaus.cargo</pluginGroup>
</pluginGroups>
### Maven 3.9.2 `settings.xml` 配置指南 Maven 是一个广泛使用的项目管理工具,其核心配置文件之一是 `settings.xml`。该文件用于定义 Maven 的全局或用户级别的行为,例如本地仓库路径、远程仓库配置、镜像设置、服务器认证信息等。 #### 1. `settings.xml` 文件位置 Maven 支持两种层级的配置: - **全局配置**:位于 Maven 安装目录下的 `conf/settings.xml`,适用于所有用户。 - **用户配置**:位于 `${user.home}/.m2/settings.xml`,仅对当前用户生效,优先级高于全局配置 [^1]。 #### 2. 基本结构与常用配置项 以下是一个典型的 `settings.xml` 配置模板,包含常见的配置项说明: ```xml <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 https://maven.apache.org/xsd/settings-1.2.0.xsd"> <!-- 设置本地仓库路径 --> <localRepository>/path/to/local/repo</localRepository> <!-- 是否启用交互式模式 --> <interactiveMode>true</interactiveMode> <!-- 离线模式开关 --> <offline>false</offline> <!-- 镜像配置 --> <mirrors> <mirror> <id>aliyun-maven</id> <url>https://maven.aliyun.com/repository/public</url> <mirrorOf>central,!third-party-repos</mirrorOf> </mirror> </mirrors> <!-- 服务器认证信息 --> <servers> <server> <id>my-releases</id> <username>admin</username> <password>admin123</password> </server> </servers> <!-- 配置文件激活条件 --> <profiles> <profile> <id>default-jdk-17</id> <activation> <activeByDefault>true</activeByDefault> <jdk>17</jdk> </activation> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> </properties> </profile> </profiles> <!-- 激活的 profile 列表 --> <activeProfiles> <activeProfile>default-jdk-17</activeProfile> </activeProfiles> </settings> ``` #### 3. 关键配置详解 - **本地仓库(`<localRepository>`)** 用于指定 Maven 存储依赖包的本地路径,默认路径为 `${user.home}/.m2/repository`。可以通过此标签修改默认路径 [^3]。 - **镜像(`<mirrors>`)** 可以配置远程仓库的镜像地址,例如使用阿里云镜像加速依赖下载。其中 `<mirrorOf>` 指定要镜像的仓库 ID,支持通配符如 `*` 或排除特定仓库如 `!central` [^2]。 - **服务器认证(`<servers>`)** 如果使用了私有仓库(如 Nexus),需要在此配置用户名和密码,确保 Maven 能够正确访问受保护的资源。 - **构建 JDK 版本控制(`<profiles>`)** 在 `<profiles>` 中可以配置不同的构建环境,例如针对不同 JDK 版本的编译器选项。配合 `<activation>` 标签可实现自动激活。 #### 4. 推荐实践 - 修改本地仓库路径时,确保目标路径存在且具有写权限。 - 使用镜像时建议避免完全覆盖中央仓库(`central`),以免影响某些插件的行为。 - 敏感信息(如密码)应使用加密方式存储,可通过 `mvn --encrypt-password` 加密后配置到 `<server>` 中。 - 不同开发环境(如测试、生产)可分别配置多个 `<profile>` 并通过 `<activeProfiles>` 控制激活状态。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值