`
pengwei841221
  • 浏览: 72196 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Maven settings.xml

阅读更多

settings.xml file contains elements used to define values which configure Maven execution in various ways, like the pom.xml , but should not be bundled to any specific project, or distributed to an audience.

 

These include values such as the local repository location, alternate remote repository servers, and authentication information.

 

There are two locations where a settings.xml file may live:

    * The Maven install: $M2_HOME/conf/settings.xml
    * A user's install: ${user.home}/.m2/settings.xml

 

The former settings.xml are also called global settings, the latter settings.xml are referred to as user settings. If both files exists, their contents gets merged, with the user-specific settings.xml being dominant.

 

Tip: If you need to create user-specific settings from scratch, it's easiest to copy the global settings from your Maven installation to your ${user.home}/.m2 directory. Maven's default settings.xml is a template with comments and examples so you can quickly tweak it to match your needs.

 

Here is an overview of the top elements under 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
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository/>
  <interactiveMode/>
  <usePluginRegistry/>
  <offline/>
  <pluginGroups/>
  <servers/>
  <mirrors/>
  <proxies/>
  <profiles/>
  <activeProfiles/>
</settings>

The contents of the settings.xml can be interpolated using the following expressions:

  1. ${user.home} and all other system properties (since Maven 3.0)
  2. ${env.HOME} etc. for environment variables
  • localRepository : This value is the path of this build system's local repository. The default value is ${user.home}/.m2/repository . This element is especially useful for a main build server allowing all logged-in users to build from a common local repository.
  • interactiveMode : true if Maven should attempt to interact with the user for input, false if not. Defaults to true .
  • usePluginRegistry : true if Maven should use the ${user.home}/.m2/plugin-registry.xml file to manage plugin versions, defaults to false . Note that for the current version of Maven 2.0, the plugin-registry.xml file should not be depended upon. Consider it dormant for now.
  • offline : true if this build system should operate in offline mode, defaults to false . This element is useful for build servers which cannot connect to a remote repository, either because of network setup or security reasons.
  • plugingroups: This element contains a list of pluginGroup elements, each contains a groupId. The list is searched when a plugin is used and the groupId is not provided in the command line. This list automatically contains org.apache.maven.plugins and org.codehaus.mojo .

The repositories for download and deployment are defined by the repositories and distributionManagement elements of the POM. However, certain settings such as username and password should not be distributed along with the pom.xml . This type of information should exist on the build server in the 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
                      http://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 : This is the ID of the server (not of the user to login as) that matches the id element of the repository/mirror that Maven tries to connect to.
  • username , password : These elements appear as a pair denoting the login and password required to authenticate to this server.
  • privateKey , passphrase : Like the previous two elements, this pair specifies a path to a private key (default is ${user.home}/.ssh/id_dsa ) and a passphrase , if required. The passphrase and password elements may be externalized in the future, but for now they must be set plain-text in the settings.xml file.
  • filePermissions , directoryPermissions : When a repository file or directory is created on deployment, these are the permissions to use. The legal values of each is a three digit number corrosponding to *nix file permissions, ie. 664, or 775.

 Note: If you use a private key to login to the server, make sure you omit the <password> element. Otherwise, the key will be ignored.

 

<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
                      http://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 : The unique identifier and user-friendly name of this mirror. The id is used to differentiate between mirror elements and to pick the corresponding credentials from the <server>section when connecting to the mirror.
  • url : The base URL of this mirror. The build system will use this URL to connect to a repository rather than the original repository URL.
  • mirrorOf : The id of the repository that this is a mirror of. For example, to point to a mirror of the Maven central repository (http://repo1.maven.org/mavne2), set this element to central . More advanced mappings like repo1,repo2 or *,!inhouse are also possible. This must not match the mirror id .
<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
                      http://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>
 
  • id : The unique identifier for this proxy. This is used to differentiate between proxy elements.
  • active : true if this proxy is active. This is useful for declaring a set of proxies, but only one may be active at a time.
  • protocol , host , port : The protocol://host:port of the proxy, seperated into discrete elements.
  • username , password : These elements appear as a pair denoting the login and password required to authenticate to this proxy server.
  • nonProxyHosts : This is a list of hosts which should not be proxied. The delimiter of the list is the expected type of the proxy server; the example above is pipe delimited - comma delimited is also common.

 

The profile element in the settings.xml is a truncated version of the pom.xml profile element. It consists of the activation , repositories , pluginRepositories and properties elements. The profile elements only include these four elements because they concerns themselves with the build system as a whole (which is the role of the settings.xml file), not about individual project object model settings.

If a profile is active from settings , its values will override any equivalently ID'd profiles in a POM or profiles.xml file.

Activations are the key of a profile. Like the POM's profiles, the power of a profile comes from its ability to modify some values only under certain circumstances; those circumstances are specified via an activation element.

<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
                      http://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>
 

Activation occurs when all specified criteria have been met, though not all are required at once.

  • jdk : activation has a built in, Java-centric check in the jdk element. This will activate if the test is run under a jdk version number that matches the prefix given. In the above example, 1.5.0_06 will match. Ranges are also supported as of Maven 2.1. See the maven-enforcer-plugin for more details about supported ranges.
  • os : The os element can define some operating system specific properties shown above. See the maven-enforcer-plugin for more details about OS values.
  • property : The profile will activate if Maven detects a property (a value which can be dereferenced within the POM by ${name} ) of the corresponding name=value pair.
  • file : Finally, a given filename may activate the profile by the existence of a file, or if it is missing .

The activation element is not the only way that a profile may be activated. The settings.xml file's activeProfile element may contain the profile's id . They may also be activated explicitly through the command line via a comma separated list after the -P flag (e.g. -P test ).

To see which profile will activate in a certain build, use the maven-help-plugin .

mvn help:active-profiles

 

Maven properties are value placeholder, like properties in Ant. Their values are accessible anywhere within a POM by using the notation ${X} , where X is the property. They come in five different styles, all accessible from the settings.xml file:

  1. env.X : Prefixing a variable with "env." will return the shell's environment variable. For example, ${env.PATH} contains the $path environment variable (%PATH% in Windows).
  2. project.x : A dot (.) notated path in the POM will contain the corresponding element's value. For example: <project><version>1.0</version></project> is accessible via ${project.version} .
  3. settings.x : A dot (.) notated path in the settings.xml will contain the corresponding element's value. For example: <settings><offline>false</offline></settings> is accessible via ${settings.offline} .
  4. Java System Properties: All properties accessible via java.lang.System.getProperties() are available as POM properties, such as ${java.home} .
  5. x : Set within a <properties /> element or an external files, the value may be used as ${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
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
  ...
  <profiles>
    <profile>
      ...
      <properties>
        <user.install>${user.home}/our-project</user.install>
      </properties>
      ...
    </profile>
  </profiles>
  ...
</settings>

 The property ${user.install} is accessible from a POM if this profile is active.

 

 

Repositories are remote collections of projects from which Maven uses to populate the local repository of the build system. It is from this local repository that Maven calls it plugins and dependencies. Different remote repositories may contain different projects, and under the active profile they may be searched for a matching release or snapshot artifact.

<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
                      http://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 : These are the policies for each type of artifact, Release or snapshot. With these two sets, a POM has the power to alter the policies for each type independent of the other within a single repository. For example, one may decide to enable only snapshot downloads, possibly for development purposes.
  • enabled : true or false for whether this repository is enabled for the respective type (releases or snapshots ).
  • updatePolicy : This element specifies how often updates should attempt to occur. Maven will compare the local POM's timestamp (stored in a repository's maven-metadata file) to the remote. The choices are: always , daily (default), interval:X (where X is an integer in minutes) or never .
  • checksumPolicy : When Maven deploys files to the repository, it also deploys corresponding checksum files. Your options are to ignore , fail , or warn on missing or incorrect checksums.
  • layout : In the above description of repositories, it was mentioned that they all follow a common layout. This is mostly correct. Maven 2 has a default layout for its repositories; however, Maven 1.x had a different layout. Use this element to specify which if it is default or legacy .

Repositories are home to two major types of artifacts. The first are artifacts that are used as dependencies of other artifacts. These are the majority of plugins that reside within central. The other type of artifact is plugins. Maven plugins are themselves a special type of artifact. Because of this, plugin repositories may be separated from other repositories (although, I have yet to hear a convincing argument for doing so). In any case, the structure of the pluginRepositories element block is similar to the repositories element. The pluginRepository elements each specify a remote location of where Maven can find new plugins.

<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
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
  ...
  <activeProfiles>
    <activeProfile>env-test</activeProfile>
  </activeProfiles>
</settings>

 The final piece of the settings.xml puzzle is the activeProfiles element. This contains a set of activeProfile elements, which each have a value of a profile id . Any profile id defined as an activeProfile will be active, reguardless of any environment settings. If no matching profile is found nothing will happen. For example, if env-test is an activeProfile , a profile in a pom.xml (or profile.xml with a corrosponding id will be active. If no such profile is found then execution will continue as normal.

分享到:
评论

相关推荐

    阿里云镜像的mavensettings.xml配置文件直接替换使用

    3. **直接替换**:根据题目描述,你可以直接将下载的名为"阿里云镜像的mavensettings.xml配置文件直接替换使用"的文件替换现有的`$USER_HOME/.m2/settings.xml`。请注意,替换前请备份原有的`settings.xml`,...

    maven settings.xml

    settings.xml maven

    maven settings.xml 直接下载使用

    国内连接maven官方的仓库更新依赖,收集一些国内快速的maven仓库镜像以备用。 settings.xml配置好的国内私服,直接可以下载使用!

    maven的本地仓库配置文件settings.xml和项目中文件pom.xml.zip

    一、Idea关联的maven本地仓库配置文件settings.xml (1)必须使用默认文件名 D:\developsoft\javaweb\commonPlugins\maven\apache-maven-3.8.1_first\conf\settings.xml 二、Myeclipse关联的maven本地仓库配置文件...

    maven settings.xml配置文件

    maven settings.xml配置文件,亲试无问题,可以使用,eclipse和Myeclipse都可以

    maven settings.xml配置及简介

    在使用maven的时候默认缓存本地仓储到C盘,为了转移目录,我们设置settings.xml,当国外网络不理想的时候,为了快速访问国内仓储,我们设置settings.xml。此资源中包含了官方默认的,也有配置好的,及使用文档,具体...

    Maven settings.xml配置理解

    Maven作为Java领域最流行的构建工具之一,它的核心配置文件`settings.xml`是理解Maven工作原理的关键。这篇博客文章“Maven settings.xml配置理解”深入探讨了这个主题,我们将在此详细阐述其主要内容。 `settings....

    Maven pom.xml与settings.xml详解

    在Maven的世界里,`pom.xml`和`settings.xml`是两个至关重要的配置文件,它们共同决定了Maven项目的构建过程和环境配置。`pom.xml`(Project Object Model)文件是每个Maven项目的核心,它包含了项目的基本信息、...

    maven的settings.xml配置

    maven的settings.xml配置,提供maven包下载位置,刚刚maven仓库镜像仓库下载。 &lt;localRepository&gt;D:/develop/apache-maven-3.6.0/repository &lt;id&gt;alimaven &lt;name&gt;aliyun maven &lt;url&gt;...

    maven setting.xml配置文件下载

    用于maven setting.xml文件丢失,eclipse集成maven插件.m2下无setting.xml文件需要配置的情况

    maven settings.xml 解决在项目新建时报错,Error executing Maven. 2 problems

    maven settings.xml 解决在项目新建时报错 Error executing Maven. 2 problems were encountered while building the effective settings。下载这个,注意54行的目录,修改成自己的项目目录,直接覆盖原来的\conf...

    maven中settings.xml文件下载

    settings.xml配置

    Maven原版settings.xml配置文件(下载)

    Maven原版settings.xml配置文件,根据个人需要,可以打开对应注释或替换相关阿里云镜像或远程仓库地址即可使用。

    maven settings.xml配置文件的作用

    `settings.xml`是Maven构建工具的核心配置文件之一,它定义了Maven仓库的位置、镜像设置、本地仓库路径、用户特定的配置信息等。在Maven的工作流程中,`settings.xml`扮演着至关重要的角色,它使得Maven能够根据用户...

    分享一个快的飞起的maven的settings.xml文件

    分享一个快的飞起的maven的settings.xml文件. 直接使用开源中国的中央仓库。

    maven settings.xml配置国内阿里云镜像

    之前找了很多个镜像配置,一直无法更新,好不容易找了一个可以用的,希望可以帮到大家

    maven settings.xml 配置文件

    这是maven 自定义仓库配置方案。本地仓库默认放在C盘,如果要想将本地仓库转移到指定到自动以的位置,就需要配置setting.xml,下载后只需修改本地仓库的配置即可!

    Maven settings.xml配置文件

    Maven settings.xml配置文件,配置了远程仓库地址,只需修改自己的本地仓库地址,便可使用,能够快速下载依赖jar包。本人亲测可用

Global site tag (gtag.js) - Google Analytics