Maven Setting.xml中各配置标签浅析
一、简单配置
1.1 设置本地仓库路径
xml
<localRepository>${user.home}/.m2/repository</localRepository>
1.2 是否需要和用户交互以获得输入
xml
<interactiveMode>true</interactiveMode>
1.3 是否启用离线模式
xml
<offline>false</offline>
二、<pluginGroups>
默认插件组织 ID 表
当我们在项目的 POM 文件中引用插件时,不显示提供 groupId,那 maven 会自动去配置的 setting.xml 配置文件下查找默认的组织 ID。
xml
<pluginGroups>
<pluginGroup>org.eclipse.jetty</pluginGroup>
<pluginGroup>org.apache.maven.plugins</pluginGroup>
<pluginGroup>org.codehaus.mojo</pluginGroup>
</pluginGroups>
三、<servers>
服务端配置
构建、部署项目时所需要要的服务器配置,此类配置不应该放在项目的 pom.xml 文件下,而应该配置到 settings.xml 中。
仓库的下载和部署是在 pom.xml 文件中的 repositories 和 distributionManagement 元素中指定的。然而,对应的仓库访问可能需要 安全认证的,安全认证的所需鉴权信息是不应该在 pom.xml 文件中的。
xml
<servers>
<server>
<id>server001</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>
id: 服务器标识 id,唯一不可重复。不是用户的登录 id。该 id 与 distributionManagement 中 repository 元素的 id 相匹配;
username、password: 服务器 id 所对应的鉴权用户名和密码;
privateKey: 如果服务器开启了私钥鉴权,所对应的私钥路径(默认为
${user.home}/.ssh/id_dsa
)。passphrase 和 password 未来可能会提取到外部,但是目前还是必须在 settings.xml 文件以纯文本的形式声明。 passphrase : 私钥对应的密码
filePermissions 、directoryPermissions :项目部署时创建的文件和目录对于的权限,这两个元素对应的合法值时一个三位的数字,对应的是 unix 文件系统的权限,如: 664、775。
configuration :传输层额外的配置项
四、<mirrors>
仓库镜像配置
xml
<mirrors>
<mirror>
<id>planetmirror.com</id>
<name>PlanetMirror Australia</name>
<url>http://downloads.planetmirror.com/pub/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
五、<proxies>
代理设置
xml
<proxies>
<proxy>
<id>myproxy</id>
<active>true</active>
<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>
id:代理设置唯一标识,用来区分不同的代理设置;
active:是否启动该代理设置;
protocol,host,port:代理的协议,protocol://host:port 例:http://proxy.somewhere.com:8080 ,分隔成独自的元素方便配置;
username:代理账户名称;
password:代理账户密码;
nonProxyHosts:跳过代理的地址列表,有多个地址的话,用 | 分隔符号分割不同的地址。
六、<profiles>
全局 profiles 设置,如果 settings 中的 profile 被激活,它的值会覆盖任何其他定义在项目 POM 中或者 profiles.xml 中带有相同 id 的 profile 配置
xml
<profiles>
<profile>
<id>test</id>
<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>
</profile>
</profiles>
profile 标签,profiles 的子元素,可以设置多个 profile 标签。
id:profile 的唯一标识符;
activation:自动触发 profile 的条件逻辑,也可以通过 settings.xml 中的 activeProfile 元素包含 profile 的 id 来激活;profile 也可以通过在命令行中使用 -P 标记和逗号分隔的列表来显示的激活(如:-P dev);
activeByDefault:是否默认激活;
jdk:jdk 版本,如果检测到的 jdk 版本与配置一致,profile 被激活;
os:匹配的 os 操作系统属性;
- name:操作系统名称;
- family:操作系统所属的家族;
- arch:操作系统底层架构;
property:如果 maven 检测到某一属性(可以在 POM 中通过 ${名称} 引用),其拥有对应的名称和值,profile 就会被激活
- name:激活 profile 的属性名称;
- value:激活 profile 的属性值;
file:通过文件来激活 profile
- exists:如果存在元素中描述的文件则激活该 profile;
- missing:如果元素中描述的文件不存在则激活 profile;
七、<properties>
对应 profile 的扩展属性列表,用来存放一些配置。这些配置可以在 POM 中通过${属性名称} 来引用。
xml
<profiles>
<profile>
...
<properties>
<user.install>${user.home}/our-project</user.install>
</properties>
...
</profile>
</profiles>
env.X:前缀为 “ env. ” 返回的是 shell 脚本环境的值。例:${env.PATH} 返回 Windos 的 %PATH% 环境变量值;
project.x :对应项目 POM 文件中的元素值;
settings.x:对应 settings.xml 中对应元素的值;
Java System Properties:所有可以通过 java.lang.System.getProperties() 访问的属性都可以在 POM 文件中通过该方式引用;
x :在
<properties>
元素中,或者外部文件中设置以 ${x} 的方式引用。
八、<repositories>
远程仓库配置,该标签不支持直接放在 settings.xml 下,需要定义在 <profile>
标签中。
xml
<profiles>
<profile>
...
<repositories>
<repository>
<id>codehausSnapshots</id>
<name>Codehaus Snapshots</name>
<releases>
<enabled>false</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
<url>http://snapshots.maven.codehaus.org/maven2</url>
<layout>default</layout>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>myPluginRepo</id>
<name>My Plugins repo</name>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>https://maven-central-eu....com/maven2/</url>
</pluginRepository>
</pluginRepositories>
...
</profile>
</profiles>
id:远程仓库唯一标识;
name:远程仓库名称;
release:远程仓库发布版本配置
- enabled:true / false 是否启用该仓库版本类型(发布版本 or 快照版本)
- updatePolicy:更新频率,maven 会比较本地 POM 和 远程 POM 的时间戳。有以下合理值供配置:
- always
- daily
- inerval:X (这里的 X 是以分钟为单位的时间间隔)
- never
- checksumPolicy: 当 maven 验证构建校验文件失败时该怎么做;有以下合理值供配置:
- ignore
- fail
- warn
snapshosts:
- enabled
- updatePolicy
- checksumPolicy
url:远程仓库 URL,按:protocol: //hostname/path 形式
layout:布局类型式,default 或者 legacy 两种
九、<pluginRepositories>
指定项目中所引用的插件的远程仓库
pluginRepository 元素配置与 上方第八点一样。
xml
<profiles>
<profile>
...
<repositories>
...
</repositories>
<pluginRepositories>
<pluginRepository>
<id>myPluginRepo</id>
<name>My Plugins repo</name>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>https://maven-central-eu....com/maven2/</url>
</pluginRepository>
</pluginRepositories>
...
</profile>
</profiles>