Skip to content

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>
  • id:镜像的唯一标识,用来区分不同的仓库;
  • name:镜像名称;
  • url: maven 仓库地址;
  • mirrorIf:maven 仓库具体的镜像子仓库。

五、<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>