Maven中settings⽂件详解
⼀、⾃带的settings⽂件
我们下载⼀个maven,在其config⽬录下,都会有⼀个l⽂件,⾥⾯很多英⽂注释,⼤家伙能看懂得最好去看那个,否则看这篇就够了。
⼆、元素说明
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="/SETTINGS/1.0.0"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/SETTINGS/1.0.0 /xsd/settings-1.0.0.xsd">
<!--设置本地仓库路径,默认值:${user.home}/.m2/repository -->
<localRepository>D:\IDEA\Maven\repository</localRepository>
<!--当maven需要输⼊值时,是否由⽤户输⼊,默认为true,当为false时,maven将根据配置信息进⾏填充-->
<interactiveMode>true</interactiveMode>
<!--执⾏构建时,Maven是否连接⽹络进⾏artifact下载、部署等操作,
默认为false,即默认联⽹
当需要处于离线状态(offline)时,将此值改为true。
-->
<offline>false</offline>
<!--当插件没有提供groupId时,则使⽤此处配置的groupId,相当于导⼊了配置此处配置的groupId的所有组件(使⽤时下载)默认包含两个groupId:org.apache.maven.plugins、jo
-->
<pluginGroups>
<!--默认包含这两个groupId -->
<!--<pluginGroup>org.apache.maven.plugins</pluginGroup>
<pluginGroup&jo</pluginGroup>-->
</pluginGroups>
<!--配置代理,⽤于多⼯作环境,通过proxy id即可实现环境切换-->
<proxies>
<proxy>
<!--唯⼀标识⼀个代理-->
<id>optional</id>
至少还有你mv<!--该代理是否激活-->
<active>true</active>
<!--代理协议-->
谢君豪主演的电视剧<protocol>http</protocol>
<!--代理服务器认证的⽤户名-->
<username>proxyuser</username>
<!--代理服务器认证的密码-->
<password>proxypass</password>
<!--代理服务器的主机名-->
<host>proxy.host</host>
<!--代理服务器的端⼝-->
<port>80</port>
<!--不被代理服务器代理的主机名/IP,可以使⽤'|'或','分隔-->
<nonProxyHosts>local|some.host</nonProxyHosts>
</proxy>
</proxies>
<!--配置访问远程服务器所需的⽤户信息,此处多为个⼈或公司私服的账号信息-->
<servers>
<server>
<--唯⼀标识⼀个server,该id必须与后⾯的仓库id⼀致,否则仓库连接不上-->
<id>nexus-maven-mirror</id>
<--远程仓库⽤户名-->
<--远程仓库⽤户名-->
<username>admin</username>
<--远程仓库密码-->
<password>admin</password>李荣浩 模特
</server>
</servers>
<mirrors>
<!--配置多个mirror,当mirrorOf的值相同时,当且仅当上⼀个远程仓库连接失败才会访问下⼀个远程仓库,
连接成功后,即使没有获取想要的jar包,也不会访问下⼀个远程仓库,故⼀般配置⼀个就好,若担⼼配置的这个镜像会连接失败,可以在加⼀个-->
<mirror>
<!--唯⼀标识⼀个mirror -->
<id>aliyun-maven-mirror</id>
<!--指定该镜像代替的时那个仓库,例如central就表⽰代替官⽅的中央库,*表⽰所有仓库都是⽤该镜像,!表⽰该仓库除外<mirrorOf>*,! central</mirrorOf>表⽰所有的远程仓库 central除外,都使⽤该阿⾥云镜像
-->
<mirrorOf>central</mirrorOf>
<--该镜像库的名称,并⽆特殊⽤处-->
<name>aliyun Maven</name>
<--代理镜像库的地址-->
<url>maven.aliyun/repository/public</url>
</mirror>
</mirrors>
<profiles>
<!-- settings⽂件种的profile⼀共包含5各元素,起作⽤分别如下:
1. id:唯⼀标识⼀个profile
2. activation:profile激活条件配置
另外两种激活⽅式:settings⽂件种的activeProfile元素(最后⼀个元素)指定porfile激活
命令⾏通过-P和逗号分隔的列表来激活,如mvn clean package-P profile-id
3. properties:全局变量设置,⼀个常见⽤法就是在此设置jdk版本和编码⽅式,如下⾯id为jdk-1.8的profile
4. repositories:构件远程仓库列表
5. pluginRepositories:插件的远程仓库配置
-->
<!--配置maven的jdk版本-->
<profile>
<id>jdk-1.8</id>
<!--下⾯两个激活项任意⼀个满⾜都可激活-->
<activation>
<!--该profile是否默认激活-->
<activeByDefault>true</activeByDefault>
<!--通过jdk版本前缀来激活当前profile。
此处当检测到使⽤的jdk版本是,则当前profile被激活,!1.8表⽰激活所有不是以1.8开头的jdk版本
-->
<jdk>1.8</jdk>
</activation>
<properties>
<mavenpiler.source>1.8</mavenpiler.source>
<mavenpiler.target>1.8</mavenpiler.target>
<mavenpilerpilerVersion>1.8</mavenpilerpilerVersion>
</properties>
</profile>
<!--配置阿⾥云Maven -->
<profile>
<id>maven-aliyun</id>
<repositories>
<repository>
<!--唯⼀标识远程仓库-->
<id>aliyun</id>
<name>aliyun maven</name>
<url>maven.aliyun/repository/public</url>
<!--远程仓库⾥的发布版本设置-->
<!--远程仓库⾥的发布版本设置-->
<releases>
<!--是否使⽤远程仓库的发布版本-->
<enabled>true</enabled>
<!--更新远程仓库发布版本的频率:always-⼀直,daily-每⽇(默认),interval:X-X分钟,never-从不-->
<updatePolicy>daily</updatePolicy>
<!-- maven验证构件检验⽂件失败时的处理⽅式:ignore-忽略,fail-失败,warn-警告-->
<checksumPolicy>warn</checksumPolicy>
</releases>
<!--远程仓库⾥的快照版本设置-->
<snapshots>
<enabled>false</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
</profile>
<!--配置私服Maven -->
<profile>
<id>maven-nexus</id>
<repositories>
<repository>
<!--对于私服,需要配置⽤户密码,故此id必须与上⾯servers中声明的id⼀样-->
<id>maven-releases</id>
<name>releases</name>
<url>localhost:8081/repository/maven-releases/</url>
<releases><enabled>true</enabled></releases>
初瑞雪<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>maven-snapshots</id>
<name>snapshots</name>
<url>localhost:8081/repository/maven-snapshots/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
</profile>
</profiles>
<!--⼿动激活profile -->
只欠秋天
<activeProfiles>
<!-- activeProfile的属性值就是上⾯profiles列表种profile的id,若不存在则忽视-->
<!-- jdk-1.8已经⾃动激活,故此处⽆需显⽰指定激活-->
<!--<activeProfile>jdk-1.8</activeProfile>-->
<activeProfile>maven-aliyun</activeProfile>
<activeProfile>maven-nexus</activeProfile>
</activeProfiles>
永俊</settings>
三、两种完整的settings⽂件
这两种的具体区别请⾛传送门:
⾥⾯第四部分总结⾥的第⼆点详细说明了两种的区别。
这⾥的两种⽅式都是配置⼀个central的代理镜像和⼀个私服仓库。
第⼀种:
只配置两种镜像仓库,⼀个是central的代理镜像,另⼀个是私服仓库,
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="/SETTINGS/1.0.0"
<settings xmlns="/SETTINGS/1.0.0"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/SETTINGS/1.0.0 /xsd/settings-1.0.0.xsd">
<!--设置本地仓库路径,默认值:${user.home}/.m2/repository -->
<localRepository>D:\IDEA\Maven\repository</localRepository>
<!--当maven需要输⼊值时,是否由⽤户输⼊,默认为true,当为false时,maven将根据配置信息进⾏填充-->
<interactiveMode>true</interactiveMode>
<!--执⾏构建时,Maven是否连接⽹络进⾏artifact下载、部署等操作,
默认为false,即默认联⽹
当需要处于离线状态(offline)时,将此值改为true。
-->
<offline>false</offline>
<!--当插件没有提供groupId时,则使⽤此处配置的groupId,相当于导⼊了配置此处配置的groupId的所有组件(使⽤时下载)默认包含两个groupId:org.apache.maven.plugins、jo
-->
<pluginGroups>
</pluginGroups>
<!--配置代理,⽤于多⼯作环境,通过proxy id即可实现环境切换-->
<proxies>
</proxies>
<!--配置访问远程服务器所需的⽤户信息,此处多为个⼈或公司私服的账号信息-->
<servers>
<server>
<id>nexus-maven</id>
<username>admin</username>
<password>admin</password>
</server>
</servers>
<mirrors>
<!--配置多个mirror,当mirrorOf的值相同时,当且仅当上⼀个远程仓库连接失败才会访问下⼀个远程仓库,连接成功,即使没有获取想要的jar包,也不会访问下⼀个远程仓库
-->
<mirror>
<!--唯⼀标识⼀个mirror -->
<id>aliyun-maven</id>
<!--指定该镜像代替的时那个仓库,例如central就表⽰代替官⽅的中央库,*表⽰所有仓库都是⽤该镜像,!表⽰该仓库除外<mirrorOf>*,! central</mirrorOf>表⽰所有的远程仓库 central除外,都使⽤该阿⾥云镜像
-->
<mirrorOf>central</mirrorOf>
<name>aliyun Maven</name>
<url>maven.aliyun/repository/public</url>
</mirror>
<!--个⼈私服,包含个⼈上传的⼀些jar包,当从上⾯镜像仓库获取不到时从此仓库获取
注意:此处mirrorOf的值不能与上⾯相同,上⾯为central,则此处⼀般为*
mirrors⼀般这样配置两个就好,若还有其它镜像库,最好在下⾯的profiles中配置
-->
<mirror>
<id>nexus-maven</id>
<mirrorOf>*</mirrorOf>
<name>private maven</name>
<url>localhost:8081/repository/maven-public/</url>
</mirror>
</mirrors>
<profiles>
<!--配置maven的jdk版本,默认为1.5-->
<profile>
<id>jdk-1.8</id>
<id>jdk-1.8</id>
<!--下⾯两个激活项任意⼀个满⾜都可激活-->
<activation>
<!--该profile是否默认激活-->
<activeByDefault>true</activeByDefault>
<!--通过jdk版本前缀来激活当前profile。
此处当检测到使⽤的jdk版本是,则当前profile被激活,!1.8表⽰激活所有不是以1.8开头的jdk版本
-->
<jdk>1.8</jdk>
</activation>
<properties>
<mavenpiler.source>1.8</mavenpiler.source>
<mavenpiler.target>1.8</mavenpiler.target>
<mavenpilerpilerVersion>1.8</mavenpilerpilerVersion>
</properties>
</profile>
</profiles>
</settings>
第⼆种:
mirror仅仅配置central的代理镜像,其它仓库通过settings⽂件的profile或pom⽂件来配置。
这种配置就⽐较灵活,不想第⼀种,直接配死了,⽽这种可以通过profile将新仓库地址加进去,然后通过activeProfile灵活激活使⽤,可扩展性好。
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="/SETTINGS/1.0.0"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/SETTINGS/1.0.0 /xsd/settings-1.0.0.xsd">
<!--设置本地仓库路径,默认值:${user.home}/.m2/repository -->
<localRepository>D:\IDEA\Maven\repository</localRepository>
<!--当maven需要输⼊值时,是否由⽤户输⼊,默认为true,当为false时,maven将根据配置信息进⾏填充-->
<interactiveMode>true</interactiveMode>
<!--执⾏构建时,Maven是否连接⽹络进⾏artifact下载、部署等操作,
默认为false,即默认联⽹
当需要处于离线状态(offline)时,将此值改为true。
-->
<offline>false</offline>
<!--当插件没有提供groupId时,则使⽤此处配置的groupId,相当于导⼊了配置此处配置的groupId的所有组件(使⽤时下载)默认包含两个groupId:org.apache.maven.plugins、jo
-->
<pluginGroups>
</pluginGroups>
<!--配置代理,⽤于多⼯作环境,通过proxy id即可实现环境切换-->
<proxies>
</proxies>
<!--配置访问远程服务器所需的⽤户信息,此处多为个⼈或公司私服的账号信息-->
<servers>
<server>
<id>maven-releases</id>
<username>admin</username>
<password>admin</password>
</server>
<server>
<id>maven-snapshots</id>