<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns="http://maven.apache.org/SETTINGS/1.0.0" targetNamespace="http://maven.apache.org/SETTINGS/1.0.0">
  <xs:element name="settings" type="Settings">
    <xs:annotation>
      <xs:documentation source="version">1.0.0</xs:documentation>
      <xs:documentation source="description">
        Root element of the user configuration file.
      </xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="Settings">
    <xs:annotation>
      <xs:documentation source="version">1.0.0</xs:documentation>
      <xs:documentation source="description">
        Root element of the user configuration file.
      </xs:documentation>
    </xs:annotation>
    <xs:all>
      <xs:element minOccurs="0" name="localRepository" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            The local repository.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="interactiveMode" type="xs:boolean" default="true">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            Whether Maven should attempt to interact with the user for input.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="usePluginRegistry" type="xs:boolean" default="false">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            Whether Maven should use the plugin-registry.xml file to manage plugin versions.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="offline" type="xs:boolean" default="false">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            Indicate whether maven should operate in offline mode full-time.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="proxies">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            Configuration for different proxy profiles. Multiple proxy profiles
            might come in handy for anyone working from a notebook or other
            mobile platform, to enable easy switching of entire proxy
            configurations by simply specifying the profile id, again either from
            the command line or from the defaults section below.
            
          </xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="proxy" minOccurs="0" maxOccurs="unbounded" type="Proxy"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="servers">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            Configuration of server-specific settings, mainly authentication
            method. This allows configuration of authentication on a per-server
            basis.
            
          </xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="server" minOccurs="0" maxOccurs="unbounded" type="Server"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="mirrors">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            Configuration of download mirrors for repositories.
          </xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="mirror" minOccurs="0" maxOccurs="unbounded" type="Mirror"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="profiles">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            Configuration of build profiles for adjusting the build
            according to environmental parameters.
            
          </xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="profile" minOccurs="0" maxOccurs="unbounded" type="Profile"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="activeProfiles">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            List of manually-activated build profiles, specified in the order in which
            they should be applied.
            
          </xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="activeProfile" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="pluginGroups">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            List of groupIds to search for a plugin when that plugin
            groupId is not explicitly provided.
          </xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="pluginGroup" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="Mirror">
    <xs:annotation>
      <xs:documentation source="version">1.0.0</xs:documentation>
      <xs:documentation source="description">
        A download mirror for a given repository.
      </xs:documentation>
    </xs:annotation>
    <xs:all>
      <xs:element minOccurs="0" name="mirrorOf" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            The server ID of the repository being mirrored, eg
            "central". This MUST NOT match the mirror id.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="name" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            The optional name that describes the mirror.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="url" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">The URL of the mirror repository.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="id" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="Proxy">
    <xs:annotation>
      <xs:documentation source="version">1.0.0</xs:documentation>
      <xs:documentation source="description">
        
        The &lt;code&gt;&amp;lt;proxy&amp;gt;&lt;/code&gt; element contains informations required to a proxy settings.
        </xs:documentation>
    </xs:annotation>
    <xs:all>
      <xs:element minOccurs="0" name="active" type="xs:boolean" default="false">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            Whether this proxy configuration is the active one.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="protocol" type="xs:string" default="http">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            The proxy protocol.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="username" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            The proxy user.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="password" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            The proxy password.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="port" type="xs:int" default="8080">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            The proxy port.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="host" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            The proxy host.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="nonProxyHosts" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            The list of non-proxied hosts (delimited by |).
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="id" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="Server">
    <xs:annotation>
      <xs:documentation source="version">1.0.0</xs:documentation>
      <xs:documentation source="description">
        
        The &lt;code&gt;&amp;lt;server&amp;gt;&lt;/code&gt; element contains informations required to a server settings.
        </xs:documentation>
    </xs:annotation>
    <xs:all>
      <xs:element minOccurs="0" name="username" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            The username used to authenticate.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="password" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            The password used in conjunction with the username to authenticate.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="privateKey" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            The private key location used to authenticate.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="passphrase" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            The passphrase used in conjunction with the privateKey to authenticate.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="filePermissions" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            The permissions for files when they are created.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="directoryPermissions" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            The permissions for directories when they are created.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="configuration">
        <xs:annotation>
          <xs:documentation source="version">0.0.0+</xs:documentation>
          <xs:documentation source="description">
            
            Extra configuration for the transport layer.
            
          </xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="id" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="Profile">
    <xs:annotation>
      <xs:documentation source="version">1.0.0</xs:documentation>
      <xs:documentation source="description">
        
        Modifications to the build process which is keyed on some
        sort of environmental parameter.
        
      </xs:documentation>
    </xs:annotation>
    <xs:all>
      <xs:element minOccurs="0" name="activation" type="Activation">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            The conditional logic which will automatically
            trigger the inclusion of this profile.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="properties">
        <xs:annotation>
          <xs:documentation source="version">0.0.0+</xs:documentation>
          <xs:documentation source="description">
            Extended configuration specific to this profile goes here.
            Contents take the form of
            &lt;property.name&gt;property.value&lt;/property.name&gt;
          </xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="repositories">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            The lists of the remote repositories.
            
          </xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="repository" minOccurs="0" maxOccurs="unbounded" type="Repository"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="pluginRepositories">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            The lists of the remote repositories for discovering plugins.
            
          </xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="pluginRepository" minOccurs="0" maxOccurs="unbounded" type="Repository"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="id" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="Repository">
    <xs:annotation>
      <xs:documentation source="version">1.0.0</xs:documentation>
      <xs:documentation source="description">
        Repository contains the information needed for establishing
        connections with remote repoistory
      </xs:documentation>
    </xs:annotation>
    <xs:all>
      <xs:element minOccurs="0" name="releases" type="RepositoryPolicy">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            How to handle downloading of releases from this repository
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="snapshots" type="RepositoryPolicy">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            How to handle downloading of snapshots from this repository
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="id" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            A unique identifier for a repository.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="name" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            Human readable name of the repository.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="url" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            The url of the repository.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="layout" type="xs:string" default="default">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            The type of layout this repository uses for locating and
            storing artifacts - can be "legacy" or "default".
          </xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="RepositoryPolicy">
    <xs:annotation>
      <xs:documentation source="version">1.0.0</xs:documentation>
      <xs:documentation source="description">Download policy</xs:documentation>
    </xs:annotation>
    <xs:all>
      <xs:element minOccurs="0" name="enabled" type="xs:boolean" default="true">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            Whether to use this repository for downloading this type of
            artifact.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="updatePolicy" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            The frequency for downloading updates - can be "always",
            "daily" (default), "interval:XXX" (in minutes) or "never"
            (only if it doesn't exist locally).
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="checksumPolicy" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            What to do when verification of an artifact checksum fails -
            warn, fail, etc. Valid values are "fail" or "warn".
          </xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="Activation">
    <xs:annotation>
      <xs:documentation source="version">1.0.0</xs:documentation>
      <xs:documentation source="description">
        
        The conditions within the build runtime environment which will trigger
        the automatic inclusion of the parent build profile.
        
      </xs:documentation>
    </xs:annotation>
    <xs:all>
      <xs:element minOccurs="0" name="activeByDefault" type="xs:boolean" default="false">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            Flag specifying whether this profile is active as a default.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="jdk" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            Specifies that this profile will be activated when a matching JDK is detected.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="os" type="ActivationOS">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            Specifies that this profile will be activated when matching OS attributes are detected.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="property" type="ActivationProperty">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            Specifies that this profile will be activated when this System property is specified.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="file" type="ActivationFile">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            
            Specifies that this profile will be activated based on existence of a file.
            
          </xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="ActivationFile">
    <xs:annotation>
      <xs:documentation source="version">1.0.0</xs:documentation>
      <xs:documentation source="description">
        
        This is the file specification used to activate a profile. The missing value will be a the location
        of a file that needs to exist, and if it doesn't the profile must run.  On the other hand exists will test
        for the existence of the file and if it is there will run the profile.
        
      </xs:documentation>
    </xs:annotation>
    <xs:all>
      <xs:element minOccurs="0" name="missing" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            The name of the file that should be missing to activate a
            profile.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="exists" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            The name of the file that should exist to activate a profile.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="ActivationOS">
    <xs:annotation>
      <xs:documentation source="version">1.0.0</xs:documentation>
      <xs:documentation source="description">
        
        This is an activator which will detect an operating system's attributes in order to activate
        its profile.
        
      </xs:documentation>
    </xs:annotation>
    <xs:all>
      <xs:element minOccurs="0" name="name" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            The name of the OS to be used to activate a profile.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="family" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            The general family of the OS to be used to activate a
            profile (e.g. 'windows')
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="arch" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            The architecture of the OS to be used to activate a profile.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="version" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            The version of the OS to be used to activate a profile.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="ActivationProperty">
    <xs:annotation>
      <xs:documentation source="version">1.0.0</xs:documentation>
      <xs:documentation source="description">
        
        This is the property specification used to activate a profile. If the value field is empty,
        then the existence of the named property will activate the profile, otherwise it does a case-sensitive
        match against the property value as well.
        
      </xs:documentation>
    </xs:annotation>
    <xs:all>
      <xs:element minOccurs="0" name="name" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            The name of the property to be used to activate a profile.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="value" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            The value of the property to be used to activate a profile.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:all>
  </xs:complexType>
</xs:schema>