<chapter id="standard_plugins">
    <title>Standard Gradle plugins</title>
    <para>There are a number of plugins included in the Gradle distribution. These are listed below.
    </para>
    <section id="sec:language_plugins">
        <title>Language plugins</title>
        <para>These plugins add support for various languages which can be compiled for and executed in the JVM.</para>
        <table>
            <title>Language plugins</title>
            <thead>
                <tr>
                    <td>Plugin Id</td>
                    <td>Automatically applies</td>
                    <td>Works with</td>
                    <td>Description</td>
                </tr>
            </thead>
            <tr>
                <td>
                    <link linkend='java_plugin'>
                        <literal>java</literal>
                    </link>
                </td>
                <td>
                    <literal>java-base</literal>
                </td>
                <td>-</td>
                <td>
                    <para>Adds Java compilation, testing and bundling capabilities to a project. It serves
                        as the basis for many of the other Gradle plugins. See also <xref linkend="tutorial_java_projects"/>.
                    </para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend='groovy_plugin'>
                        <literal>groovy</literal>
                    </link>
                </td>
                <td><literal>java</literal>,
                    <literal>groovy-base</literal>
                </td>
                <td>-</td>
                <td>
                    <para>Adds support for building Groovy projects. See also <xref linkend="tutorial_groovy_projects"/>.
                    </para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend="scala_plugin">
                        <literal>scala</literal>
                    </link>
                </td>
                <td><literal>java</literal>,
                    <literal>scala-base</literal>
                </td>
                <td>-</td>
                <td>
                    <para>Adds support for building Scala projects.</para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend='antlr_plugin'>
                        <literal>antlr</literal>
                    </link>
                </td>
                <td>
                    <literal>java</literal>
                </td>
                <td>-</td>
                <td>
                    <para>Adds support for generating parsers using <ulink url="http://www.antlr.org/">Antlr</ulink>.
                    </para>
                </td>
            </tr>
        </table>
    </section>
    <section id="sec:incubating_language_plugins">
        <title>Incubating language plugins</title>
        <para>These plugins add support for various languages:</para>
        <table>
            <title>Language plugins</title>
            <thead>
                <tr>
                    <td>Plugin Id</td>
                    <td>Automatically applies</td>
                    <td>Works with</td>
                    <td>Description</td>
                </tr>
            </thead>
            <tr>
                <td>
                    <link linkend='native_software'>
                        <literal>assembler</literal>
                    </link>
                </td>
                <td>-</td>
                <td>-</td>
                <td>
                    <para>Adds native assembly language capabilities to a project.</para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend='native_software'>
                        <literal>c</literal>
                    </link>
                </td>
                <td>-</td>
                <td>-</td>
                <td>
                    <para>Adds C source compilation capabilities to a project.</para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend='native_software'>
                        <literal>cpp</literal>
                    </link>
                </td>
                <td>-</td>
                <td>-</td>
                <td>
                    <para>Adds C++ source compilation capabilities to a project.</para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend='native_software'>
                        <literal>objective-c</literal>
                    </link>
                </td>
                <td>-</td>
                <td>-</td>
                <td>
                    <para>Adds Objective-C source compilation capabilities to a project.</para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend='native_software'>
                        <literal>objective-cpp</literal>
                    </link>
                </td>
                <td>-</td>
                <td>-</td>
                <td>
                    <para>Adds Objective-C++ source compilation capabilities to a project.</para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend='native_software'>
                        <literal>windows-resources</literal>
                    </link>
                </td>
                <td>-</td>
                <td>-</td>
                <td>
                    <para>Adds support for including Windows resources in native binaries.</para>
                </td>
            </tr>
        </table>
    </section>
    <section id="sec:integration_plugins">
        <title>Integration plugins</title>
        <para>These plugins provide some integration with various runtime technologies.</para>
        <table>
            <title>Integration plugins</title>
            <thead>
                <tr>
                    <td>Plugin Id</td>
                    <td>Automatically applies</td>
                    <td>Works with</td>
                    <td>Description</td>
                </tr>
            </thead>
            <tr>
                <td>
                    <link linkend='application_plugin'>
                        <literal>application</literal>
                    </link>
                </td>
                <td>
                    <literal>java</literal>, <literal>distribution</literal>
                </td>
                <td>-</td>
                <td>
                    <para>Adds tasks for running and bundling a Java project as a command-line application.
                    </para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend='ear_plugin'>
                        <literal>ear</literal>
                    </link>
                </td>
                <td>-</td>
                <td>
                    <literal>java</literal>
                </td>
                <td>
                    <para>Adds support for building J2EE applications.</para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend="maven_plugin">
                        <literal>maven</literal>
                    </link>
                </td>
                <td>-</td>
                <td><literal>java</literal>,
                    <literal>war</literal>
                </td>
                <td>
                    <para>Adds support for publishing artifacts to Maven repositories.</para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend="osgi_plugin">
                        <literal>osgi</literal>
                    </link>
                </td>
                <td>
                    <literal>java-base</literal>
                </td>
                <td>
                    <literal>java</literal>
                </td>
                <td>
                    <para>Adds support for building OSGi bundles.</para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend="war_plugin">
                        <literal>war</literal>
                    </link>
                </td>
                <td>
                    <literal>java</literal>
                </td>
                <td>-</td>
                <td>
                    <para>Adds support for assembling web application WAR files. See also <xref linkend="web_project_tutorial"/>.
                    </para>
                </td>
            </tr>
        </table>
    </section>
    <section id="sec:incubating_integration_plugins">
        <title>Incubating integration plugins</title>
        <para>These plugins provide some integration with various runtime technologies.</para>
        <table>
            <title>Incubating integration plugins</title>
            <thead>
                <tr>
                    <td>Plugin Id</td>
                    <td>Automatically applies</td>
                    <td>Works with</td>
                    <td>Description</td>
                </tr>
            </thead>
            <tr>
                <td>
                    <link linkend="distribution_plugin">
                        <literal>distribution</literal>
                    </link>
                </td>
                <td>-</td>
                <td>-</td>
                <td>
                    <para>Adds support for building ZIP and TAR distributions.
                    </para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend="javaLibraryDistribution_plugin">
                        <literal>java-library-distribution</literal>
                    </link>
                </td>
                <td><literal>java</literal>, <literal>distribution</literal></td>
                <td>-</td>
                <td>
                    <para>Adds support for building ZIP and TAR distributions for a Java library.
                    </para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend="publishing_ivy">
                        <literal>ivy-publish</literal>
                    </link>
                </td>
                <td>-</td>
                <td><literal>java</literal>, <literal>war</literal></td>
                <td>
                    <para>This plugin provides a new DSL to support publishing artifacts to Ivy repositories, which improves on the existing DSL.
                    </para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend="publishing_maven">
                        <literal>maven-publish</literal>
                    </link>
                </td>
                <td>-</td>
                <td><literal>java</literal>, <literal>war</literal></td>
                <td>
                    <para>This plugin provides a new DSL to support publishing artifacts to Maven repositories, which improves on the existing DSL.
                    </para>
                </td>
            </tr>
        </table>
    </section>
    <section id="sec:software_development_plugins">
        <title>Software development plugins</title>
        <para>These plugins provide help with your software development process.</para>
        <table>
            <title>Software development plugins</title>
            <thead>
                <tr>
                    <td>Plugin Id</td>
                    <td>Automatically applies</td>
                    <td>Works with</td>
                    <td>Description</td>
                </tr>
            </thead>
            <tr>
                <td>
                    <link linkend='announce_plugin'>
                        <literal>announce</literal>
                    </link>
                </td>
                <td>-</td>
                <td>-</td>
                <td>
                    <para>Publish messages to your favourite platforms, such as Twitter or Growl.</para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend='build_announcements_plugin'>
                        <literal>build-announcements</literal>
                    </link>
                </td>
                <td>announce</td>
                <td>-</td>
                <td>
                    <para>Sends local announcements to your desktop about interesting events in the build lifecycle.</para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend='checkstyle_plugin'>
                        <literal>checkstyle</literal>
                    </link>
                </td>
                <td>
                    <literal>java-base</literal>
                </td>
                <td>-</td>
                <td>
                    <para>Performs quality checks on your project's Java source files using
                        <ulink url="http://checkstyle.sourceforge.net/index.html">Checkstyle</ulink>
                        and generates reports from these checks.
                    </para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend='codenarc_plugin'>
                        <literal>codenarc</literal>
                    </link>
                </td>
                <td>
                    <literal>groovy-base</literal>
                </td>
                <td>-</td>
                <td>
                    <para>Performs quality checks on your project's Groovy source files using
                        <ulink url="http://codenarc.sourceforge.net/index.html">CodeNarc</ulink>
                        and generates reports from these checks.
                    </para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend='eclipse_plugin'>
                        <literal>eclipse</literal>
                    </link>
                </td>
                <td>-</td>
                <td><literal>java</literal>,<literal>groovy</literal>,
                    <literal>scala</literal>
                </td>
                <td>
                    <para>Generates files that are used by <ulink url="http://eclipse.org">Eclipse IDE</ulink>, thus making
                        it possible to import the project into Eclipse. See also <xref linkend="tutorial_java_projects"/>.
                    </para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend='eclipse_plugin'>
                        <literal>eclipse-wtp</literal>
                    </link>
                </td>
                <td>-</td>
                <td><literal>ear</literal>,
                    <literal>war</literal>
                </td>
                <td>
                    <para>Does the same as the eclipse plugin plus generates eclipse WTP (Web Tools Platform) configuration files.
                        After importing to eclipse your war/ear projects should be configured to work with WTP.
                        See also <xref linkend="tutorial_java_projects"/>.
                    </para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend='findbugs_plugin'>
                        <literal>findbugs</literal>
                    </link>
                </td>
                <td>
                    <literal>java-base</literal>
                </td>
                <td>-</td>
                <td>
                    <para>Performs quality checks on your project's Java source files using
                        <ulink url="http://findbugs.sourceforge.net">FindBugs</ulink>
                        and generates reports from these checks.
                    </para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend='idea_plugin'>
                        <literal>idea</literal>
                    </link>
                </td>
                <td>-</td>
                <td>
                    <literal>java</literal>
                </td>
                <td>
                    <para>Generates files that are used by <ulink url="http://www.jetbrains.com/idea/index.html">Intellij IDEA IDE</ulink>,
                        thus making it possible to import the project into IDEA.
                    </para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend='jdepend_plugin'>
                        <literal>jdepend</literal>
                    </link>
                </td>
                <td>
                    <literal>java-base</literal>
                </td>
                <td>-</td>
                <td>
                    <para>Performs quality checks on your project's source files using
                        <ulink url="http://clarkware.com/software/JDepend.html">JDepend</ulink>
                        and generates reports from these checks.
                    </para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend='pmd_plugin'>
                        <literal>pmd</literal>
                    </link>
                </td>
                <td>
                    <literal>java-base</literal>
                </td>
                <td>-</td>
                <td>
                    <para>Performs quality checks on your project's Java source files using
                        <ulink url="http://pmd.sourceforge.net">PMD</ulink>
                        and generates reports from these checks.
                    </para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend='project_reports_plugin'>
                        <literal>project-report</literal>
                    </link>
                </td>
                <td>
                    <literal>reporting-base</literal>
                </td>
                <td>-</td>
                <td>
                    <para>Generates reports containing useful information about your Gradle build.
                    </para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend='signing_plugin'>
                        <literal>signing</literal>
                    </link>
                </td>
                <td>base</td>
                <td>-</td>
                <td>
                    <para>Adds the ability to digitally sign built files and artifacts.
                    </para>
                </td>
            </tr>
        </table>
    </section>
    <section id="sec:incubating_software_development_plugins">
        <title>Incubating software development plugins</title>
        <para>These plugins provide help with your software development process.</para>
        <table>
            <title>Software development plugins</title>
            <thead>
                <tr>
                    <td>Plugin Id</td>
                    <td>Automatically applies</td>
                    <td>Works with</td>
                    <td>Description</td>
                </tr>
            </thead>
            <tr>
                <td>
                    <link linkend="buildDashboard_plugin">
                        <literal>build-dashboard</literal>
                    </link>
                </td>
                <td>reporting-base</td>
                <td>-</td>
                <td>
                    <para>Generates build dashboard report.
                    </para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend="build_init_plugin">
                        <literal>build-init</literal>
                    </link>
                </td>
                <td>wrapper</td>
                <td>-</td>
                <td>
                    <para>Adds support for initializing a new Gradle build. Handles converting a Maven build to a Gradle build.
                    </para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend="native_software">
                        <literal>cunit</literal>
                    </link>
                </td>
                <td>-</td>
                <td>-</td>
                <td>
                    <para>Adds support for running <ulink url="http://cunit.sourceforge.net">CUnit</ulink> tests.
                    </para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend='jacoco_plugin'>
                        <literal>jacoco</literal>
                    </link>
                </td>
                <td>reporting-base</td>
                <td>java</td>
                <td>
                    <para>Provides integration with the
                        <ulink url="http://www.eclemma.org/jacoco/">JaCoCo</ulink>
                            code coverage library for Java.
                    </para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend="native_software">
                        <literal>visual-studio</literal>
                    </link>
                </td>
                <td>-</td>
                <td>native language plugins</td>
                <td>
                    <para>Adds integration with Visual Studio.</para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend="wrapper_plugin">
                        <literal>wrapper</literal>
                    </link>
                </td>
                <td>-</td>
                <td>-</td>
                <td>
                    <para>Adds a <apilink class="org.gradle.api.tasks.wrapper.Wrapper"/> task for generating Gradle wrapper files.
                    </para>
                </td>
            </tr>
            <tr>
                <td>
                    <link linkend="javaGradle_plugin">
                        <literal>java-gradle-plugin</literal>
                    </link>
                </td>
                <td>java</td>
                <td></td>
                <td>
                    <para>Assists with development of Gradle plugins by providing standard plugin build configuration and validation.</para>
                </td>
            </tr>
        </table>
    </section>
    <section id="sec:base_plugins">
        <title>Base plugins</title>
        <para>These plugins form the basic building blocks which the other plugins are assembled from. They are
            available for you to use in your build files, and are listed here for completeness. However, be aware that
            they are not yet considered part of Gradle's public API. As such, these plugins are not documented in the
            user guide. You might refer to their API documentation to learn more about them.
        </para>
        <table>
            <title>Base plugins</title>
            <thead>
                <tr>
                    <td>Plugin Id</td>
                    <td>Description</td>
                </tr>
            </thead>
            <tr>
                <td>base</td>
                <td>
                    <para>Adds the standard lifecycle tasks and configures reasonable defaults for the archive tasks:
                        <itemizedlist>
                            <listitem>adds build
                                <replaceable>ConfigurationName</replaceable>
                                tasks.
                                Those tasks assemble the artifacts belonging to the specified configuration.
                            </listitem>
                            <listitem>adds upload
                                <replaceable>ConfigurationName</replaceable>
                                tasks.
                                Those tasks assemble and upload the artifacts belonging to the specified configuration.
                            </listitem>
                            <listitem>configures reasonable default values for all archive tasks (e.g. tasks that inherit from
                                <apilink class="org.gradle.api.tasks.bundling.AbstractArchiveTask"/>).
                                For example, the archive tasks are tasks of types: <apilink class="org.gradle.api.tasks.bundling.Jar"/>,
                                <apilink class="org.gradle.api.tasks.bundling.Tar"/>, <apilink class="org.gradle.api.tasks.bundling.Zip"/>.
                                Specifically, <literal>destinationDir</literal>,
                                <literal>baseName</literal>
                                and
                                <literal>version</literal>
                                properties of the archive tasks are preconfigured with defaults.
                                This is extremely useful because it drives consistency across projects;
                                the consistency regarding naming conventions of archives and their location after the build completed.
                            </listitem>
                        </itemizedlist>
                    </para>
                </td>
            </tr>
            <tr>
                <td>java-base</td>
                <td>
                    <para>Adds the source sets concept to the project. Does not add any particular source sets.</para>
                </td>
            </tr>
            <tr>
                <td>groovy-base</td>
                <td>
                    <para>Adds the Groovy source sets concept to the project.</para>
                </td>
            </tr>
            <tr>
                <td>scala-base</td>
                <td>
                    <para>Adds the Scala source sets concept to the project.</para>
                </td>
            </tr>
            <tr>
                <td>reporting-base</td>
                <td>
                    <para>Adds some shared convention properties to the project, relating to report generation.</para>
                </td>
            </tr>
        </table>
    </section>
    <section id="sec:third_party_plugins">
        <title>Third party plugins</title>
        <para>You can find a list of external plugins at the <ulink url="http://plugins.gradle.org/">Gradle Plugins site</ulink>.
        </para>
    </section>
</chapter>
