maven settings文件详解

本文是对https://maven.apache.org/settings.html的翻译和总结

  1. 介绍

    1. 快速概览
  2. settings细节

    1. 简单值

    2. Plugin Groups

    3. Servers

      1. Password Encryption
    4. Mirrors

    5. Proxies

    6. Profiles

      1. Activation
      2. Repositories
      3. Plugin Repositories
    7. Active Profiles

介绍

快速概览

settings文件是一个全局的配置,并不与某一个项目绑定。它包含了对本地库位置的配置,远程库服务,验证信息。

settings.xml可以配置在两个位置:

  • maven的安装目录
  • 用户目录:${user.home}/.m2/settings.xml

maven安装目录中的settings.xml是一个全局的配置,用户目录中的settings.xml文件只对当前用户有效。
如果两个文件都存在,则其内容将合并,用户特定的settings.xml占主导地位。

以下是settings下的顶级元素的概述:

    <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/>
      <interactiveMode/>
      <offline/>
      <pluginGroups/>
      <servers/>
      <mirrors/>
      <proxies/>
      <profiles/>
      <activeProfiles/>
    </settings>

可以使用以下表达式插入settings.xml的内容:

  1. ${user.home} 和其他所有系统属性 (since Maven 3.0)
  2. ${env.HOME} 等环境变量

请注意,settings.xml中的<profiles>元素中定义的properties不能用于插值。

settings 细节

简单值

一半的顶级元素是简单值,表示一系列值,用于描述构建系统中全程有效的元素。

<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</localRepository>
  <interactiveMode>true</interactiveMode>
  <offline>false</offline>
  ...
</settings>
  • localRepository:本地仓库的地址,默认是${user.home}/.m2/repository
  • interactiveMode:是否以交互式进行输入,则为true,否则为false。默认为true。例如在创建maven应用上时以交互式创建。
1. 非交互式创建应用:
mvn archetype:generate
        -DgroupId=com.howtodoinjava
        -DartifactId=DemoJavaProject
        -DarchetypeArtifactId=maven-archetype-quickstart
        -DinteractiveMode=false
2. 交互式创建maven应用
mvn archetype:generate

此时,maven会让你输入项目的一些配置,例如groupIdartifactIdversion

  • offline:是否在offline模式下操作。由于网络设置或安全原因,此元素对无法连接到远程存储库的构建服务器很有用。

Plugin Groups

该元素包含一个pluginGroup元素列表,每个元素都包含一个groupId。使用插件时搜索列表,并且命令行中未提供groupId。此列表自动包含org.apache.maven.pluginsorg.codehaus.mojo

<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">
  ...
  <pluginGroups>
    <pluginGroup>org.eclipse.jetty</pluginGroup>
  </pluginGroups>
  ...
</settings>

例如,给定上述设置,Maven命令行可以以简写形式执行org.eclipse.jetty:jetty-maven-plugin:run

mvn jetty:run

Servers

用于下载和部署的存储库由POM的repositoriesdistributionManagement元素定义。但是,某些设置(如用​​户名和密码)不应与pom.xml一起分发。此类信息应存在于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">
  ...
  <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>
  ...
</settings>
  • id:仓库的名称
  • username,password:这些元素显示为一对,表示对此服务器进行身份验证所需的登录名和密码。
  • privateKey, passphrase:这也是成对出现,表示私钥的路径(默认是${user.home}/.ssh/id_dsa)和密码。密码和密码元素将来可能会外部化,但是现在必须在settings.xml文件中设置纯文本。
  • filePermissions, directoryPermissions:在部署时创建存储库文件或目录时,这些是要使用的权限。每个的合法值是对应于* nix文件权限的三位数字,例如, 664或775。

注意:如果使用私钥登录服务器,请确保省略<password>元素。否则,密钥将被忽略。

密码加密

一个新功能 - 服务器密码和密码加密已添加到2.1.0+。查看此页面的详细信息

MIrrors

使用镜像的一些原因:

  • 互联网上有一个同步镜像,地理位置更近,速度更快
  • 您希望将特定存储库替换为您可以更好地控制的内部存储库
  • 您希望运行存储库管理器以向镜像提供本地缓存,并且需要使用其URL

一般是第一个原因

<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">
  ...
  <mirrors>
    <mirror>
      <id>planetmirror.com</id>
      <name>PlanetMirror Australia</name>
      <url>http://downloads.planetmirror.com/pub/maven2</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
  ...
</settings>
  • id,name:id必须唯一(不要与仓库id一样),name随意
  • url:镜像的地址
  • mirrorOf:需要被镜像的仓库id。例如,要指向Maven中央存储库(https://repo.maven.apache.org/maven2/)的镜像,请将此元素设置为central。更高级的映射,如repo1,repo2*,!inhouse也是可能的。这必须与镜像ID不匹配。

有关镜像的更深入介绍,请阅读镜像设置指南

Proxies

如果你访问不了某一个仓库,可以使用代理,用的不多,所以这里也不详细说明。想要了解的可以去官网查看。

<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">
  ...
  <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>
  ...
</settings>

Profiles

settings.xml中的profile元素是pom.xml profile元素的精简版本。它由activationrepositoriespluginRepositoriesproperties元素组成。概要文件元素仅包含这四个元素,因为它们关注整个构建系统(这是settings.xml文件的作用),而不是单个项目对象模型设置。

如果profilesettings.xml中被激活,则其值将覆盖POM或profiles.xml文件中任何等效的ID'd配置。

Activation

该属性可以配置配置文件的激活条件,例如,激活条件必须是 jdk8,必须是windows等。

<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">
  ...
  <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>
  ...
</settings>

当满足所有指定条件时激活,但不是一次都需要。

  • jdk:activation在jdk元素中有一个内置的,以Java为中心的检查。如果测试是在与给定前缀匹配的jdk版本号下运行,则会激活此选项。在上面的例子中,1.5.0_06将匹配。从Maven 2.1开始也支持范围。有关支持的范围的更多详细信息,请参阅maven-enforcer-plugin
  • os:os元素可以定义上面显示的一些操作系统特定属性。有关OS值的更多详细信息,请参阅maven-enforcer-plugin
  • property:如果Maven检测到相应name=value对的属性(可以在POM中取消引用${name}的值),则将激活该配置文件。
  • file:最后,给定的文件名可以通过存在文件来激活配置文件,或者如果它丢失了。
    activation元素不是激活配置文件的唯一方式。settings.xml文件的activeProfile元素可能包含配置文件的id。它们也可以在-P标志(例如-P test)之后通过命令行通过逗号分隔列表显式激活。

要查看将在特定版本中激活的配置文件,请使用maven-help-plugin

mvn help:active-profiles
Properties

Maven属性是值占位符,就像Ant中的属性一样。可以使用符号${X}在POM内的任何位置访问它们的值,其中X是属性。它们有五种不同的样式,都可以从settings.xml文件中访问:

  1. env.X:使用“env.”前缀变量将返回shell的环境变量。例如,${env.PATH}返回$path环境变量(Windows中是%PATH%
  2. project.x:POM中的点(.)标记路径将包含相应元素的值。例如:<project><version>1.0</version></project>可通过${project.version}访问。
  3. settings.xsettings.xml中的点(.)标记路径将包含相应元素的值。例如:<settings><offline>false</offline></settings>可通过${settings.offline}访问。
  4. Java系统属性:可通过java.lang.System.getProperties()访问的所有属性都可用作POM属性,例如${java.home}
  5. x:在<properties />元素或外部文件中设置的值,该值可以用作${someVar}
<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">
  ...
  <profiles>
    <profile>
      ...
      <properties>
        <user.install>${user.home}/our-project</user.install>
      </properties>
      ...
    </profile>
  </profiles>
  ...
</settings>

如果此配置文件被启用,则可以在POM中使用${user.install}访问该属性。

Repositories

Repositories是Maven用于填充构建系统的本地存储库的项目的远程集合。它来自这个本地存储库,Maven称之为插件和依赖项。不同的远程存储库可能包含不同的项目,并且在启用的profile下,可以搜索它们以查找匹配的版本或快照工件。

<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">
  ...
  <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>
        ...
      </pluginRepositories>
      ...
    </profile>
  </profiles>
  ...
</settings>
  • releases, snapshots:这是针对每种工件,Release或snapshot的策略。通过这两个集合,POM可以在单个存储库中独立于另一个类型更改每种类型的策略。例如,对于开发目的的远程库,可以决定仅启用快照下载。
  • enabled:是否为相应类型(releasessnapshots)启用此存储库,是true还是false
  • updatePolicy:此元素指定更新本地库频率。Maven会将本地POM的时间戳(存储在存储库的maven-metadata文件中)与远程数据进行比较。选项包括:alwaysdaily(默认),interva:X(其中X是以分钟为单位的整数)或never
  • checksumPolicy:当Maven将文件部署到存储库时,它还会部署相应的校验和文件。您可以选择ignorefailwarn缺少或不正确的校验和。
  • layout:。。。
Plugin Repositories

存储库是两种主要类型的工件的所在地。第一个是用作其他工件的依赖项的工件。这些是位于中央的大多数插件。另一种类型的工件是插件。Maven插件本身就是一种特殊的工件。因此,插件存储库可能与其他存储库分离(尽管如此,我还没有听到令人信服的论据)。在任何情况下,pluginRepositories元素块的结构类似于repositories元素。 pluginRepository元素指定Maven可以在哪里找到新插件的远程位置。

启用Profiles

<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">
  ...
  <activeProfiles>
    <activeProfile>env-test</activeProfile>
  </activeProfiles>
</settings>

settings.xml拼图的最后一部分是activeProfiles元素。它包含一组activeProfile元素,包含一个profileid。无论任何环境设置如何,任何定义为activeProfileprofile id都将将被启用。如果没有找到匹配的profile,则不会发生任何事。


  1. 详细的maven属性说明

  2. repositorypluginRepository的顺序会影响获取远程工建的顺序

  3. 镜像匹配规则,首先找到完全匹配的镜像,如果未找到完全匹配的镜像,但是有多个间接匹配(符合条件),则会选择第一个镜像作为镜像。


maven拉取jar的过程:

5614480-aa5169f13939ac32.jpg
maven下载jar流程.jpg

猜你喜欢

转载自blog.csdn.net/weixin_34104341/article/details/90921723