Maven Setting.xml中各配置标签浅析

Administrator
发布于 2023-11-06 / 21 阅读 / 0 评论 / 0 点赞

Maven Setting.xml中各配置标签浅析

一、简单配置

1.1 设置本地仓库路径

<localRepository>${user.home}/.m2/repository</localRepository>

1.2 是否需要和用户交互以获得输入

 <interactiveMode>true</interactiveMode>

1.3 是否启用离线模式

<offline>false</offline>

二、<pluginGroups> 默认插件组织ID表

当我们在项目的POM文件中引用插件时,不显示提供groupId,那maven会自动去配置的setting.xml配置文件下查找默认的组织ID。

<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文件中的。

 <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相匹配;

  • usernamepassword: 服务器id所对应的鉴权用户名和密码;

  • privateKey: 如果服务器开启了私钥鉴权,所对应的私钥路径(默认为 ${user.home}/.ssh/id_dsa )。passphrasepassword 未来可能会提取到外部,但是目前还是必须在settings.xml文件以纯文本的形式声明。

  • passphrase : 私钥对应的密码

  • filePermissions 、directoryPermissions :项目部署时创建的文件和目录对于的权限,这两个元素对应的合法值时一个三位的数字,对应的是 unix 文件系统的权限,如: 664、775。

  • configuration :传输层额外的配置项

四、<mirrors> 仓库镜像配置

<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> 代理设置

<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配置

<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中通过${属性名称} 来引用。

<profiles>
    <profile>
      ...
      <properties>
        <user.install>${user.home}/our-project</user.install>
      </properties>
      ...
    </profile>
  </profiles>
  1. env.X:前缀为 “ env. ” 返回的是shell脚本环境的值。例:${env.PATH} 返回 Windos 的 %PATH% 环境变量值;

  2. project.x :对应项目POM文件中的元素值;

  3. settings.x:对应settings.xml 中对应元素的值;

  4. Java System Properties:所有可以通过 java.lang.System.getProperties() 访问的属性都可以在POM文件中通过该方式引用;

  5. x :在<properties> 元素中,或者外部文件中设置以 ${x} 的方式引用。

八、<repositories> 远程仓库配置,该标签不支持直接放在 settings.xml下,需要定义在 <profile> 标签中。

<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 元素配置与 上方第八点一样。

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

评论