Maven配置解读

1. settings.xml的作用

它是用来设置Maven参数的配置文件。并且,settings.xml是Maven的全局配置文件。settings.xml中包含类似本地仓库、远程仓库和联网使用的代理信息等配置。

2. maven/conf/settings.xml & 用户目录/.m2/settings.xml

Maven目录的conf中的settings.xml和用户目录的.m2子目录下面的settings.xml的同时存在的时候,用户目录下面的settings.xml中的定义会覆盖Maven/conf目录下面的settings.xml中的定义。用户目录下的settings.xml不存在则可以自己拷贝一份Maven自带的配置后修改成自定义配置后自动覆盖Maven配置。

3. 配置示例及说明

<?xml version="1.0" encoding="UTF-8"?>
<!-- 声明范式 -->
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.1.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <!-- 本地仓库路径(默认注掉,使用用户目录的.m2目录) -->
    <localRepository>D:\repository</localRepository>
    <!-- 表示maven是否需要和用户交互以获得输入,如果maven需要和用户交互以获得输入,则设置成true,反之则应为false。默认为true。 -->
    <interactiveMode>true</interactiveMode>
    <!-- 在Maven进行项目编译和部署等操作时是否允许Maven进行联网来下载所需要的信息,默认false -->
    <offline>false</offline>
    <!-- maven是否需要使用plugin-registry.xml文件来管理插件版本 -->
    <usePluginRegistry>false</usePluginRegistry>
    <!-- 当我们使用某个插件,并且没有在命令行为其提供组织Id(groupId)的时候,Maven就会使用该列表,默认包含:org.apache.maven.plugins和org.codehaus.mojo -->
    <pluginGroups>
        <!--plugin的组织Id(groupId) -->
        <pluginGroup>org.codehaus.mojo</pluginGroup>
    </pluginGroups>
    <!-- 配置服务端 -->
    <servers>
        <!-- server元素包含服务器配置信息,默认注掉 -->
        <server>
            <!-- server id -->
            <id>releases</id>
            <!-- 用户名 -->
            <username>admin</username>
            <!-- 密码 -->
            <password>123456</password>
            <!-- 鉴权时使用的私钥位置 -->
            <privateKey>C:\Users\Administrator\.m2\key</privateKey>
            <!-- 鉴权时使用的私钥密码。 -->
            <passphrase>some_passphrase</passphrase>
            <!-- Linux系统中文件被创建时的权限 -->
            <filePermissions>664</filePermissions>
            <!-- Linux系统中目录被创建时的权限。 -->
            <directoryPermissions>775</directoryPermissions>
        </server>
    </servers>
    <!-- mirrors定义一系列的远程仓库的镜像 -->
    <mirrors>
        <!-- Maven*仓库地址 -->
        <!-- 搜索地址:https://mvnrepository.com/ 或 https://search.maven.org/ -->
        <mirror>
            <!-- id:镜像唯一标识 -->
            <id>central</id>
            <!-- 镜像名称 -->
            <name>Maven Repository Switchboard</name>
            <!-- 该镜像的URL -->
            <url>https://repo1.maven.org/maven2/</url>
            <!-- 或者使用地址2:<url>http://repo.maven.apache.org/maven2</url> -->
            <!-- mirrorOf:被镜像的服务器的id,central表示代替官方的*库 -->
            <mirrorOf>central</mirrorOf>
        </mirror>
        <!-- 阿里仓库 -->
        <!-- 搜索地址:https://developer.aliyun.com/mvn/guide -->
        <mirror>
            <id>alimaven</id>
            <name>aliyun maven</name>
            <url>https://maven.aliyun.com/repository/public</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
        <!-- 腾讯云Maven镜像 -->
        <!-- 地址:https://mirrors.tencent.com/help/maven.html -->
        <mirror>
            <id>nexus-tencentyun</id>
            <name>Nexus tencentyun</name>
            <url>http://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
            <mirrorOf>*</mirrorOf>
        </mirror>
        <!-- 华为Maven镜像 -->
        <mirror>
            <id>huaweicloud</id>
            <name>mirror from maven huaweicloud</name>
            <url>https://mirror.huaweicloud.com/repository/maven/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
        <!-- repo2镜像 -->
        <mirror>
            <id>repo2</id>
            <mirrorOf>central</mirrorOf>
            <name>Human Readable Name for this Mirror.</name>
            <url>http://repo2.maven.org/maven2/</url>
        </mirror>
        <!-- ibiblio镜像 -->
        <mirror>
            <id>ibiblio</id>
            <mirrorOf>central</mirrorOf>
            <name>Human Readable Name for this Mirror.</name>
            <url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
        </mirror>
        <!-- JBoos镜像 -->
        <mirror>
            <id>jboss-public-repository-group</id>
            <mirrorOf>central</mirrorOf>
            <name>JBoss Public Repository Group</name>
            <url>http://repository.jboss.org/nexus/content/groups/public</url>
        </mirror>
        <!-- 谷歌镜像 -->
        <mirror>
            <id>google-maven-central</id>
            <name>Google Maven Central</name>
            <url>https://maven-central.storage.googleapis.com</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
        <!-- *仓库在中国的镜像 -->
        <mirror>
            <id>maven.net.cn</id>
            <name>oneof the central mirrors in china</name>
            <url>http://maven.net.cn/content/groups/public/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
        <!-- 阿里云提供的镜像 -->
        <mirror>
            <id>alimaven</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
    </mirrors>
    <!-- 代理配置 -->
    <proxies>
        <proxy>
            <!-- 代理id -->
            <id>xxx</id>
            <!-- 代理是否激活 -->
            <active>true</active>
            <!-- 代理的协议。 协议://主机名:端口 -->
            <protocol>http</protocol>
            <!-- 代理的主机名。协议://主机名:端口 -->
            <host>127.0.0.1</host>
            <!-- 代理的端口。协议://主机名:端口 -->
            <port>8765</port>
            <!-- 代理的用户名 -->
            <username>admin</username>
            <!-- 代理的密码 -->
            <password>123456</password>
            <!-- 不该被代理的主机名列表。该列表的分隔符由代理服务器指定,常见的是竖杠或逗号等。 -->
            <nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts>
        </proxy>
    </proxies>
    <!-- profiles:根据环境参数来调整构建配置的列表 -->
    <!--
     settings.xml中的profile元素是pom.xml中profile元素的裁剪版本。
     它包含了id、activation、repositories、pluginRepositories和 properties元素。
     这里的profile元素只包含这五个子元素是因为这里只关心构建系统这个整体(这正是settings.xml文件的角色定位),
     而非单独的项目对象模型设置。如果一个settings.xml中的profile被激活,
     它的值会覆盖任何其它定义在pom.xml中带有相同id的profile。
     当所有的约束条件都满足的时候就会激活这个profile。
     -->
    <profiles>
        <profile>
            <!-- profile id -->
            <id>test</id>
            <!-- 扩展属性列表 -->
            <properties>

            </properties>
            <!-- 自动触发profile的条件逻辑 -->
            <activation>
                <!-- profile默认是否激活的标识 -->
                <activeByDefault>false</activeByDefault>
                <!-- 当匹配的jdk被检测到 -->
                <jdk>1.8</jdk>
                <os>
                    <!-- 激活profile的操作系统的名字 -->
                    <name>Windows 10</name>
                    <!-- 激活profile的操作系统所属家族(如 'windows') -->
                    <family>Windows</family>
                    <!-- 激活profile的操作系统体系结构 -->
                    <arch>x64</arch>
                    <!-- 激活profile的操作系统版本 -->
                    <version>19042.1466</version>
                </os>
                <!--
                    property:如果Maven检测到某一个属性(其值可以在POM中通过${name}引用),
                    其拥有对应的name = 值,Profile就会被激活。
                    如果值字段是空的,那么存在属性名称字段就会激活profile,
                    否则按区分大小写方式匹配属性值字段
                -->
                <property>
                    <name>mavenVersion</name>
                    <value>2.0.3</value>
                </property>
                <!--
                    提供一个文件名,通过检测该文件的存在或不存在来激活profile。
                    missing检查文件是否存在,如果不存在则激活profile。
                    另一方面,exists则会检查文件是否存在,如果存在则激活profile
                -->
                <file>
                    <exists>${basedir}/file2.properties</exists>
                    <missing>${basedir}/file1.properties</missing>
                </file>
            </activation>
            <!-- repositories:远程仓库列表,它是Maven用来填充构建系统本地仓库所使用的一组远程项目 -->
            <repositories>
                <repository>
                    <id>central</id>
                    <name>libs-release</name>
                    <url>http://127.0.0.1/artifactory/libs-release</url>
                    <!-- 处理远程仓库里快照版本的下载 -->
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </repository>
            </repositories>
            <!-- 插件远程仓库列表 -->
            <pluginRepositories>
                <pluginRepository>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                    <id>central</id>
                    <name>plugins</name>
                    <url>http://127.0.0.1/artifactory/plugins</url>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>
    <activeProfiles>
        <!-- 手动激活profiles的列表 -->
        <activeProfile>test</activeProfile>
    </activeProfiles>
</settings>

上一篇:Gradle下载安装教程


下一篇:IDEA如何把多个项目放在同一个工作空间下