 ------
 Introduction
 ------
 Author
 ------
 YYYY-MM-DD
 ------


Plugin Name

  Plugin introduction, description, and other relevant information.

* Goals Overview

  General information about the goals.

  * {{{<goal>.html}flex:generate}} short description for this plugin goal.
  * {{{<goal>.html}flex:compile}} short description for this plugin goal.
  * {{{<goal>.html}flex:test-generate}} short description for this plugin goal.
  * {{{<goal>.html}flex:test-compile}} short description for this plugin goal.
  * {{{<goal>.html}flex:test}} short description for this plugin goal.
  * {{{<goal>.html}flex:optimize}} short description for this plugin goal.
  * {{{<goal>.html}flex:package}} short description for this plugin goal.

* Usage

  General instructions on how to use the Plugin Name can be found on the {{{usage.html}usage page}}. Some more
  specific use cases are described in the examples given below. Last but not least, users occasionally contribute
  additional examples, tips or errata to the
  {{{http://docs.codehaus.org/display/MAVENUSER/Plugin+Name}plugin's wiki page}}.

  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 {{{mail-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 {{{mail-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-tracking.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
  {{{source-repository.html}source repository}} and will find supplementary information in the
  {{{http://maven.apache.org/guides/development/guide-helping.html}guide to helping with Maven}}.

* Examples

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

  * {{{examples/example-one.html}Example Description One}}

  * {{{examples/example-two.html}Example Description Two}}