  ------
  Usage
  ------
  Robert Scholte
  ------
  2017-11-05

~~ Copyright 2006 The Apache Software Foundation.
~~
~~ Licensed 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


Usage

* Introduction

  The Maven JDeprScan plugin is used to scan class files for uses of deprecated API elements.
  
* Configuration of the Maven JDeprScan Plugin

  To use the Maven JDeprScan Plugin you have to configure it as an <<<extensions>>> which means
  the configuration in your pom file has to look like this:
  
+-----
<project>
  [...]
  <build>
    [...]
    <plugins>
      [...]
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jdeprscan-plugin</artifactId>
        <version>${project.version}</version>
        <configuration>
          <!-- configuration elements goes here -->
        </configuration>
      </plugin>
   [...]
</project>
+-----

  The configuration element contains the configuration for the plugin 
  {{{https://maven.apache.org/guides/mini/guide-configuring-plugins.html}like any other Maven plugin}}.
  The different elements which can be configured for this plugin can identified by the
  {{{./plugin-info.html}goals documentation}}.

* Requirements

  Based on the foundation of the plugin it is required to have JDK 9 installed. This means
  either you have it configured via <<JAVA_HOME>> which means to run the whole
  Maven build with JDK 9 or via <<Toolchains>>.

  How to configure Maven related to Toolchains can be read in the
  {{{https://maven.apache.org/guides/mini/guide-using-toolchains.html}Toolchains documentation}}.

