可能存在的两个地方,前一种设置称为全局设置,后一种设置称为用户设置。如果两个文件都存在,它们的内容将被合并,以用户特定的settings.xml为主。
<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 --> <interactiveMode/><!-- 如果为true,说明Maven试图与用户进行输入交互。默认值为true --> <offline/><!-- 脱机模式下运行,默认为false。如果无法连接网络,设置为false --> <pluginGroups/><!-- 插件组 --> <servers/><!-- 服务器信息 --> <mirrors/><!-- 镜像 --> <proxies/><!-- 代理 --> <profiles/><!-- 配置文件 --> <activeProfiles/><!-- 需要激活配置文件 --> </settings>
<localRepository>G:/maven</localRepository>
包括三种仓库
仓库读取顺序
步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中以备将来引用。
步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库以备将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)
访问远程服务器需要的信息
<servers> <server> <id>server001</id><!-- 这是服务器的ID(而不是登录的用户的ID),它与Maven试图连接的存储库/镜像的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>
当觉得国外服务器慢的时候,可以用镜像,比如阿里的。镜像的优先级大于仓库。Maven不会聚合镜像,而只是选择第一个匹配。如果希望提供多个存储库,请使用存储库管理器。
<mirrors> <mirror> <id>planetmirror.com</id><!-- 镜像的id,如果与server的id一样,说明用该server的配置信息连接此镜像 --> <name>PlanetMirror Australia</name><!-- 镜像的名称 --> <url>http://downloads.planetmirror.com/pub/maven2</url><!-- 镜像的地址 --> <mirrorOf>central</mirrorOf><!-- 被镜像存储库的服务器ID,这必须与镜像id不匹配。 --> </mirror> </mirrors>
根据mirrorOf匹配规则如下:
代理
<proxies> <proxy> <id>myproxy</id><!-- 代理的id --> <active>true</active><!-- true说明这个代理是激活的 --> <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>
配置文件,每个profile由activation, repositories, pluginRepositories和properties组成
当所有指定的条件都满足时,激活就会发生,尽管不是所有的条件都需要同时满足
<activation> <activeByDefault>false</activeByDefault><!-- 是否激活 --> <jdk>1.5</jdk><!-- JDK检测 --> <os><!-- 操作系统检测 --> <name>Windows XP</name><!-- 操作系统 --> <family>Windows</family><!-- 操作系统家族 --> <arch>x86</arch><!-- 操作系统 --> <version>5.1.2600</version><!-- 操作系统版本 --> </os> <property><!-- 如果Maven检测到对应的name和value,则配置文件将被激活 --> <name>mavenVersion</name> <value>2.0.3</value> </property> <file><!-- 根据文件存在/不存在激活profile --> <!-- 根据文件存在激活profile --> <exists>${basedir}/file2.properties</exists> <!-- 根据文件不存在激活profile --> <missing>${basedir}/file1.properties</missing> </file> </activation>
值占位符
<properties> <user.install>${user.home}/our-project</user.install> </properties>
远程仓库集合
<repositories> <repository> <id>codehausSnapshots</id><!-- 远程仓库id --> <name>Codehaus Snapshots</name><!-- 远程仓库名称 --> <releases> <enabled>false</enabled><!-- 是否提供下载 --> <updatePolicy>always</updatePolicy><!-- 构建时检查频率,always总是, daily (default)一天只检查一次, interval:X距离上次多少分钟才检查 , never从不检查 --> <checksumPolicy>warn</checksumPolicy> <!-- Maven验证artifact校验文件缺少或不正确采取的策略:ignore忽略, fail失败,warn警告 --> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>never</updatePolicy> <checksumPolicy>fail</checksumPolicy> </snapshots> <url>http://snapshots.maven.codehaus.org/maven2</url><!-- 远程仓库地址 --> <layout>default</layout><!-- default or legacy,布局:默认还是遗留 --> </repository> </repositories> <pluginRepositories>
直接激活配置
<activeProfiles> <activeProfile>env-test</activeProfile> </activeProfiles>