 -----
 Introduction
 -----
 Hervé Boutemy
 -----
 2013-07-23
 -----

 ~~ 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}

  Analyzes the dependencies of a project for undeclared or unused artifacts.

  <<Warning>>: Because analysis is done on the bytecode rather than the source,
  some cases are not detected including constants, annotations with source-only retention, 
  and links in Javadoc. This can lead to incorrect results when these are the only uses
  of a dependency.

  The main component is <<<ProjectDependencyAnalyzer>>>
  ({{{./apidocs/org/apache/maven/shared/dependency/analyzer/ProjectDependencyAnalyzer.html}javadoc}}), which uses
  <<<ClassAnalyzer>>>
  ({{{./apidocs/org/apache/maven/shared/dependency/analyzer/ClassAnalyzer.html}javadoc}})
  and <<<DependencyAnalyzer>>>
  ({{{./apidocs/org/apache/maven/shared/dependency/analyzer/DependencyAnalyzer.html}javadoc}}).
