maven settings文件详解

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

介绍

快速概览

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

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

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

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

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

    
      
      
      
      
      
      
      
      
      
    

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

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

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

settings 细节

简单值

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


  ${user.home}/.m2/repository
  true
  false
  ...

  • 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


  ...
  
    org.eclipse.jetty
  
  ...

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

mvn jetty:run

Servers

用于下载和部署的存储库由POM的repositoriesdistributionManagement元素定义。但是,某些设置(如用​​户名和密码)不应与pom.xml一起分发。此类信息应存在于settings.xml中的构建服务器上。


  ...
  
    
      server001
      my_login
      my_password
      ${user.home}/.ssh/id_dsa
      some_passphrase
      664
      775
      
    
  
  ...

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

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

密码加密

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

MIrrors

使用镜像的一些原因:

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

一般是第一个原因


  ...
  
    
      planetmirror.com
      PlanetMirror Australia
      http://downloads.planetmirror.com/pub/maven2
      central
    
  
  ...

  • id,name:id必须唯一(不要与仓库id一样),name随意
  • url:镜像的地址
  • mirrorOf:需要被镜像的仓库id。例如,要指向Maven中央存储库(https://repo.maven.apache.org/maven2/)的镜像,请将此元素设置为central。更高级的映射,如repo1,repo2*,!inhouse也是可能的。这必须与镜像ID不匹配。

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

Proxies

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


  ...
  
    
      myproxy
      true
      http
      proxy.somewhere.com
      8080
      proxyuser
      somepassword
      *.google.com|ibiblio.org
    
  
  ...

Profiles

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

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

Activation

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


  ...
  
    
      test
      
        false
        1.5
        
          Windows XP
          Windows
          x86
          5.1.2600
        
        
          mavenVersion
          2.0.3
        
        
          ${basedir}/file2.properties
          ${basedir}/file1.properties
        
      
      ...
    
  
  ...

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

  • 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中的点(.)标记路径将包含相应元素的值。例如:1.0可通过${project.version}访问。
  3. settings.xsettings.xml中的点(.)标记路径将包含相应元素的值。例如:false可通过${settings.offline}访问。
  4. Java系统属性:可通过java.lang.System.getProperties()访问的所有属性都可用作POM属性,例如${java.home}
  5. x:在元素或外部文件中设置的值,该值可以用作${someVar}

  ...
  
    
      ...
      
        ${user.home}/our-project
      
      ...
    
  
  ...

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

Repositories

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


  ...
  
    
      ...
      
        
          codehausSnapshots
          Codehaus Snapshots
          
            false
            always
            warn
          
          
            true
            never
            fail
          
          http://snapshots.maven.codehaus.org/maven2
          default
        
      
      
        ...
      
      ...
    
  
  ...

  • 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


  ...
  
    env-test
  

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


  1. 详细的maven属性说明

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

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


maven拉取jar的过程:

maven settings文件详解_第1张图片
maven下载jar流程.jpg

你可能感兴趣的:(maven settings文件详解)