<!--
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.
-->

<component-set>
  <components>
    <!--
     |
     | WagonManager
     |
     -->
    <component>
      <role>org.apache.maven.artifact.manager.WagonManager</role>
      <implementation>org.apache.maven.artifact.manager.DefaultWagonManager</implementation>
      <requirements>
        <requirement>
          <role>org.apache.maven.artifact.repository.ArtifactRepositoryFactory</role>
        </requirement>
      </requirements>
    </component>

    <component>
      <role>org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager</role>
      <implementation>org.apache.maven.artifact.repository.metadata.DefaultRepositoryMetadataManager</implementation>
      <requirements>
        <requirement>
          <role>org.apache.maven.artifact.manager.WagonManager</role>
        </requirement>
      </requirements>
    </component>

    <!--
     |
     | Transformations
     |
     -->
    <component>
      <role>org.apache.maven.artifact.transform.ArtifactTransformation</role>
      <role-hint>snapshot</role-hint>
      <implementation>org.apache.maven.artifact.transform.SnapshotTransformation</implementation>
      <requirements>
        <requirement>
          <role>org.apache.maven.artifact.manager.WagonManager</role>
        </requirement>
        <requirement>
          <role>org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager</role>
        </requirement>
      </requirements>
    </component>

    <component>
      <role>org.apache.maven.artifact.transform.ArtifactTransformation</role>
      <role-hint>release</role-hint>
      <implementation>org.apache.maven.artifact.transform.ReleaseArtifactTransformation</implementation>
      <requirements>
        <requirement>
          <role>org.apache.maven.artifact.manager.WagonManager</role>
        </requirement>
        <requirement>
          <role>org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager</role>
        </requirement>
      </requirements>
    </component>

    <component>
      <role>org.apache.maven.artifact.transform.ArtifactTransformation</role>
      <role-hint>latest</role-hint>
      <implementation>org.apache.maven.artifact.transform.LatestArtifactTransformation</implementation>
      <requirements>
        <requirement>
          <role>org.apache.maven.artifact.manager.WagonManager</role>
        </requirement>
        <requirement>
          <role>org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager</role>
        </requirement>
      </requirements>
    </component>

    <!--
    |
    | ArtifactTransformationManager
    |
    -->
    <component>
      <role>org.apache.maven.artifact.transform.ArtifactTransformationManager</role>
      <implementation>org.apache.maven.artifact.transform.DefaultArtifactTransformationManager</implementation>
      <requirements>
        <requirement>
          <role>org.apache.maven.artifact.transform.ArtifactTransformation</role>
          <field-name>artifactTransformations</field-name>
        </requirement>
      </requirements>
    </component>

    <!--
     |
     | Resolver
     |
     -->
    <component>
      <role>org.apache.maven.artifact.resolver.ArtifactResolver</role>
      <implementation>org.apache.maven.artifact.resolver.DefaultArtifactResolver</implementation>
      <requirements>
        <requirement>
          <role>org.apache.maven.artifact.manager.WagonManager</role>
        </requirement>
        <requirement>
          <role>org.apache.maven.artifact.transform.ArtifactTransformationManager</role>
        </requirement>
        <requirement>
          <role>org.apache.maven.artifact.factory.ArtifactFactory</role>
        </requirement>
        <requirement>
          <role>org.apache.maven.artifact.resolver.ArtifactCollector</role>
        </requirement>
      </requirements>
    </component>

    <!--
     |
     | ArtifactInstaller
     |
     -->
    <component>
      <role>org.apache.maven.artifact.installer.ArtifactInstaller</role>
      <implementation>org.apache.maven.artifact.installer.DefaultArtifactInstaller</implementation>
      <requirements>
        <requirement>
          <role>org.apache.maven.artifact.transform.ArtifactTransformationManager</role>
        </requirement>
        <requirement>
          <role>org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager</role>
        </requirement>
      </requirements>
    </component>

    <!--
     |
     | ArtifactDeployer
     |
     -->
    <component>
      <role>org.apache.maven.artifact.deployer.ArtifactDeployer</role>
      <implementation>org.apache.maven.artifact.deployer.DefaultArtifactDeployer</implementation>
      <requirements>
        <requirement>
          <role>org.apache.maven.artifact.manager.WagonManager</role>
        </requirement>
        <requirement>
          <role>org.apache.maven.artifact.transform.ArtifactTransformationManager</role>
        </requirement>
        <requirement>
          <role>org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager</role>
        </requirement>
      </requirements>
    </component>

    <component>
      <role>org.apache.maven.artifact.repository.ArtifactRepositoryFactory</role>
      <implementation>org.apache.maven.artifact.repository.DefaultArtifactRepositoryFactory</implementation>
    </component>
    <component>
      <role>org.codehaus.plexus.component.configurator.ComponentConfigurator</role>
      <implementation>org.apache.maven.artifact.manager.WagonComponentConfigurator</implementation>
      <role-hint>wagon</role-hint>
    </component>
  </components>

</component-set>
