Maven中的settings可能会在两个位置存在,一个是maven安装目录<maven.home>/conf/settings.xml,另一个是用户目录<user.home>/.m2/settings.xml,这两个文件前者是全局配置,后者是用户配置,如果这两个位置都有settings文件存在,那么内容会被合并,以用户配置作为主导。

<?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 https://maven.apache.org/xsd/settings-1.2.0.xsd">
    <!--指定本地仓库的地址,用于存储下载的包-->
    <localRepository>D:\Environment\Maven\apache-maven-3.9.4\repository</localRepository>
    <!--是否与用户输入进行交互-->
    <interactiveMode>true</interactiveMode>
    <!--是否离线模式-->
    <offline>false</offline>
    <!--一个包含了maven插件的groupId的列表-->
    <pluginGroups>
        <!--
        里面的每一项都是一个组id 配置这个可以让在命令行执行mvn命令时,省略插件的组id
        例如:mvn org.eclipse.jetty:jetty-maven-plugin:run 可以简化为 mvn jetty:run
        -->
        <pluginGroup>org.eclipse.jetty</pluginGroup>
    </pluginGroups>
    <!--代理-->
    <proxies>
        <proxy>
            <!--唯一标识,区分两个proxy-->
            <id/>
            <!--是否使用,多个代理之间只能有一个是激活的-->
            <active>false</active>
            <!--protocol, host, port 这三个元素拼接就是具体的代理地址-->
            <protocol/>
            <host/>
            <port/>
            <!--代理服务器的账号密码 如果需要的话-->
            <username/>
            <password/>
            <!--不代理的地址列表,竖线或者逗号分割都可以-->
            <nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts>
        </proxy>
    </proxies>
    <!--
    一些开发或者下载时需要的仓库会被定义在POM的repositories和distributionManagement中
    然而,有一些例如username和password的设置不应该跟随pom.xml一些被分发
    这些类型的信息就应该存在settings.xml的servers部分中
    -->
    <servers>
        <server>
            <!--server的这个id,不是作为用户登录使用的,而是去匹配repository/mirror中的id元素,maven会尝试去连接-->
            <id>server001</id>
            <!--username和password会作为一个对出现,意味着要用他们去服务器进行认证-->
            <username/>
            <password/>
            <!--
            privateKey和passphrase,就像上面的账号密码一样,这两个标签具体指向了一个私钥的路径
            默认是${user.home}/.ssh/id_dsa,和一个密码,如果有需要的话,passphrase 和password 元素会在将来被外部化,但对于现在来说
            这两个元素必须在settings.xml中以明文的形式被设置
            如果你用了私钥的形式登录 password就要被删除,不然私钥会被忽略
            -->
            <privateKey/>
            <passphrase/>
            <!--
            filePermissions和directoryPermissions
            当仓库文件或目录在开发时被创建,仓库文件或目录的权限会使用filePermissions和directoryPermissions的值
            权限采用三个数字,和linux文件权限相同
            -->
            <filePermissions>664</filePermissions>
            <directoryPermissions>775</directoryPermissions>
            <configuration/>
        </server>
    </servers>
    <!--镜像,配置maven可以获取具体开发库的地址-->
    <mirrors>
        <!--最多只能为一个特定的仓库设置一个镜像,换句话说,你不能用相同的mirrorOf去定义一个仓库,这样做的话maven只会选择第一个匹配的仓库-->
        <!--如果将mirrorOf设置为 *,则表示maven所有的下载包的请求都会被映射到这个仓库上-->
        <!--mirrorOf可以用逗号作为分隔符配置多个,感叹号用于排除不想要的id-->
        <!--请注意mirrorOf之间不要有空格-->
        <!--当maven去找一些仓库的镜像时,他会先去寻找是否有精确匹配到mirrorOf的,如果没有直接匹配到的,就会根据规则去挑选第一个声明的镜像,
        因此,可以通过定义mirror顺序去影响匹配顺序-->
        <mirror>
            <!--
                id, name需要被设置为对用户友好的独一无二的标识符表名这个镜像的名字
                id是用于去区分两个mirror元素和在连接镜像的时候去挑选相应的sever元素的认证信息(如果有的话)
            -->
            <id>public-aliyun</id>
            <name>public-aliyun</name>
            <!--
            url是镜像的基本地址,构建时会用这个url去连接仓库,而不是用原始的仓库地址
            -->
            <url>https://maven.aliyun.com/repository/public</url>
            <!--镜像存储仓库的id
            例如:要指向一个maven central(https://repo.maven.apache.org/maven2/)仓库的镜像
            就设置这个元素为 central,更多高级映射例如,repo1,repo2 或者 *,!xxx 同样都是可行的,这个不能id元素匹配
            -->
            <mirrorOf>central</mirrorOf>
        </mirror>
        <mirror>
            <id>gradle-plugin</id>
            <name>gradle-plugin</name>
            <mirrorOf>central</mirrorOf>
            <url>https://maven.aliyun.com/repository/gradle-plugin</url>
        </mirror>
        <mirror>
            <id>apache snapshots</id>
            <name>apache snapshots</name>
            <mirrorOf>central</mirrorOf>
            <url>https://maven.aliyun.com/repository/apache-snapshots</url>
        </mirror>
        <mirror>
            <id>central-aliyun</id>
            <mirrorOf>central</mirrorOf>
            <name>central-aliyun</name>
            <url>https://maven.aliyun.com/repository/central</url>
        </mirror>
        <mirror>
            <mirrorOf>com.e-iceblue</mirrorOf>
            <id>com.e-iceblue</id>
            <name>e-iceblue</name>
            <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
        </mirror>
    </mirrors>
    <!--
    profile 元素就是pom.xml的简易版本
    由 activation, repositories, pluginRepositories , properties 组成
    profile 只有以上四个元素 因为他们自身被认为与构建系统是一个整体(这也是setting文件所扮演的角色)
    无关独立的项目
    如果settings的profile被激活,他会重写任何一个profiles.xml或POM中id相同的profile
    -->
    <profiles>
        <profile>
            <id>test</id>
            <!--activation是profile的关键配置,他会在所有条件满足时生效-->
            <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>
            </activation>
            <!--properties是值的占位符,通过使用${x}可以在pom的任何地方访问到具体值,他们有五个不同的风格,所有都可以从settings中访问到-->
            <!--
            env.X:在变量前加上“env”。将返回shell的环境变量。例如:${env。PATH}包含$ PATH环境变量(Windows中为%PATH%)
            project.X:POM中以点(.)表示的路径将包含相应元素的值。例如:<project><version>1.0</version></project>可以通过${project.version}访问。
            setting.X:在settings.xml中以点(.)表示的路径将包含相应元素的值。例如:<settings><offline>false</offline></settings>可以通过${settings.offline}访问。
            Java系统属性:通过Java.lang.System.getProperties()访问的所有属性都可以作为POM属性使用,例如${Java.home}。
            在<properties/>元素或外部文件中设置,该值可以用作${someVar}。
            -->
            <properties>
                <user.install>${user.home}/our-project</user.install>
            </properties>
        </profile>
    </profiles>
    <!--settings.xml的最后一块拼图,他包含了一系列activeProfile 元素,每一个activeProfile 元素都有一个profileId作为值-->
    <!--activeProfile指定的profile文件,无论他环境设置是否满足,都会被激活,如果指定的profileId没有找到对应profile 什么都不会发生-->
    <activeProfiles/>
</settings>

更多推荐