 -----
 Available Plugins
 -----
 -----
 2010-07-05
 -----
~~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.

Available Plugins

The following plugins are shipped along with each NPanday release:

 * {{{./maven-aspx-plugin/index.html}<<<aspx>>>}}

 * {{{./maven-compile-plugin/index.html}<<<compile>>>}}

 * {{{./maven-fxcop-plugin/index.html}<<<fxcop>>>}}

 * {{{./maven-install-plugin/index.html}<<<install>>>}}

 * {{{./maven-link-plugin/index.html}<<<link>>>}}

 * {{{./maven-mojo-generator-plugin/index.html}<<<mojo-generator>>>}}

 * {{{./maven-repository-plugin/index.html}<<<repository>>>}}

 * {{{./maven-resgen-plugin/index.html}<<<resgen>>>}}

 * {{{./maven-resolver-plugin/index.html}<<<resolver>>>}}

 * {{{./maven-test-plugin/index.html}<<<test>>>}}

 * {{{./maven-vsinstaller-plugin/index.html}<<<vsinstaller>>>}}

 * {{{./maven-webapp-plugin/index.html}<<<webapp>>>}}

 * {{{./wix-maven-plugin/index.html}<<<wix>>>}}

 * {{{./maven-wsdl-plugin/index.html}<<<wsdl>>>}}

 * {{{./maven-xsd-plugin/index.html}<<<xsd>>>}}

 * {{{./maven-xsp-plugin/index.html}<<<xsp>>>}}

 * NPanday.Plugin.Addin.JavaBinding

 * NPanday.Plugin.Devenv.JavaBinding

 * NPanday.Plugin.Msbuild.JavaBinding

 * NPanday.Plugin.Settings.JavaBinding

 * NPanday.Plugin.SysRef.JavaBinding

~~ TODO:  docs for plugins in the 'netplugins' subdirectory?
