<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://maven.apache.org/POM/4.0.0" xmlns="http://maven.apache.org/POM/4.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 name="localRepository" minOccurs="0" 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 name="interactiveMode" minOccurs="0" 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 name="usePluginRegistry" minOccurs="0" 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 name="offline" minOccurs="0" 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 name="proxies" minOccurs="0">
        <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 name="servers" minOccurs="0">
        <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 name="mirrors" minOccurs="0">
        <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 name="profiles" minOccurs="0">
        <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="ProfileInSettings"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="activeProfiles" minOccurs="0">
        <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 name="pluginGroups" minOccurs="0">
        <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 name="mirrorOf" minOccurs="0" 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
            &quot;central&quot;. This MUST NOT match the mirror id.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="name" minOccurs="0" 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 name="url" minOccurs="0" 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 name="id" minOccurs="0" 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:annotation>
    <xs:all>
      <xs:element name="active" minOccurs="0" 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 name="protocol" minOccurs="0" 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 name="username" minOccurs="0" 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 name="password" minOccurs="0" 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 name="port" minOccurs="0" 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 name="host" minOccurs="0" 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 name="nonProxyHosts" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
          	The list of non-proxied hosts (usually 
          	comma-delimited).
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="id" minOccurs="0" 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:annotation>
    <xs:all>
      <xs:element name="username" minOccurs="0" 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 name="password" minOccurs="0" 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 name="privateKey" minOccurs="0" 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 name="passphrase" minOccurs="0" 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 name="filePermissions" minOccurs="0" 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 name="directoryPermissions" minOccurs="0" 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 name="configuration" minOccurs="0">
        <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 name="id" minOccurs="0" 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="ProfileInSettings">
    <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 name="activation" minOccurs="0" type="ActivationInSettings">
        <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 name="properties" minOccurs="0">
        <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 name="repositories" minOccurs="0">
        <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="RepositoryInSettings"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="pluginRepositories" minOccurs="0">
        <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="RepositoryInSettings"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="id" minOccurs="0" 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="RepositoryInSettings">
    <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 name="releases" minOccurs="0" type="RepositoryPolicyInSettings">
        <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 name="snapshots" minOccurs="0" type="RepositoryPolicyInSettings">
        <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 name="id" minOccurs="0" 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 name="name" minOccurs="0" 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 name="url" minOccurs="0" 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 name="layout" minOccurs="0" 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 &quot;legacy&quot; or
            &quot;default&quot;.</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="RepositoryPolicyInSettings">
    <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 name="enabled" minOccurs="0" 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 name="updatePolicy" minOccurs="0" 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 &quot;always&quot;, &quot;daily&quot; (default), &quot;interval:XXX&quot; (in minutes) or
            &quot;never&quot; (only if it doesn&apos;t exist locally).
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="checksumPolicy" minOccurs="0" 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
            &quot;fail&quot; or &quot;warn&quot;</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="ActivationInSettings">
    <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 name="activeByDefault" minOccurs="0" 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 name="jdk" minOccurs="0" 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 name="os" minOccurs="0" type="ActivationOSInSettings">
        <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 name="property" minOccurs="0" type="ActivationPropertyInSettings">
        <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 name="file" minOccurs="0" type="ActivationFileInSettings">
        <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="ActivationFileInSettings">
    <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&apos;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 name="missing" minOccurs="0" 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 name="exists" minOccurs="0" 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="ActivationOSInSettings">
    <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&apos;s attributes in order to activate
        its profile.
      </xs:documentation>
    </xs:annotation>
    <xs:all>
      <xs:element name="name" minOccurs="0" 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 name="family" minOccurs="0" 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. &apos;windows&apos;)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="arch" minOccurs="0" 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 name="version" minOccurs="0" 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="ActivationPropertyInSettings">
    <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 name="name" minOccurs="0" 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 name="value" minOccurs="0" 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>
