 ------
 Introduction
 ------
 Jason van Zyl
 ------
 2010-04-26
 ------

Maven 2 SuperDuper Plugin

  This plugin is used to transform your development life. Don't bother with self-help
  books on how to get over your build-time blues. Just use this plugin and
  everything will miraculously change.

* Goals Overview

  * {{{./superduper-transform.html}superduper:transform}} performs the miraculous build transformation.

  []

* Usage

  General instructions on how to use the SuperDuper Plugin can be found on the {{{./usage.html}usage page}}. Some more
  specific use cases are described in the examples given below.

  In case you still have questions regarding the plugin's usage, please have a look at the {{{./faq.html}FAQ}} and feel
  free to contact the {{{./mailing-lists.html}user mailing list}}. The posts to the mailing list are archived and could
  already contain the answer to your question as part of an older thread. Hence, it is also worth browsing/searching
  the {{{./mailing-lists.html}mail archive}}.

  If you feel like the plugin is missing a feature or has a defect, you can fill a feature request or bug report in our
  {{{./issue-management.html}issue tracker}}. When creating a new issue, please provide a comprehensive description of your
  concern. Especially for fixing bugs it is crucial that the developers can reproduce your problem. For this reason,
  entire debug logs, POMs or most preferably little demo projects attached to the issue are very much appreciated.
  Of course, patches are welcome, too. Contributors can check out the project from our
  {{{./scm.html}source repository}}.

* Examples

  To provide you with better understanding of some usages of the SuperDuper Plugin,
  you can take a look at the following examples:

  * {{{./examples/sample-example.html}Sample Example}}
