 -----
 Introduction
 -----
 Karl Heinz Marbaise
 -----
 2017-05-07
 -----

 ~~ 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.

 ~~ NOTE: For help with the syntax of this file, see:
 ~~ http://maven.apache.org/doxia/references/apt-format.html

${project.name}

  The Maven Artifact Transfer component is intended as an API
  to install, deploy and resolve artifacts in Maven 3.
  
  The {{{./comparison.html} comparison}} will show the differences between
  a dependency, an artifact and a Maven project.
  
  The {{{./install-project.html} install project}} page will show
  how to use this component to make an install of an existing project,
  which makes the handling within plugins much easier.

  The {{{./deploy-project.html} deploy project}} page will show
  how to use this component to make a deploy of an existing project.

  <<Current State Of The Component>>
  Currently this shared component has not yet reached the final 1.0.0 version state, which means the interfaces can
  change.
  

  
