# Appendix A. Gradle Samples

Listed below are some of the stand-alone samples which are included in the Gradle distribution. You can find these samples in the ``GRADLE_HOME`/samples` directory of the distribution.

Table A.1. Samples included in the distribution

Sample | Description
`announce` | A project which uses the announce plugin
`application` | A project which uses the application plugin
`buildDashboard` | A project which uses the build-dashboard plugin
`codeQuality` | A project which uses the various code quality plugins.
`customBuildLanguage` | This sample demonstrates how to add some custom elements to the build DSL. It also demonstrates the use of custom plug-ins to organize build logic.
`customDistribution` | This sample demonstrates how to create a custom Gradle distribution and use it with the Gradle wrapper.
`customPlugin` | A set of projects that show how to implement, test, publish and use a custom plugin and task.
`ear/earCustomized/ear` | Web application ear project with customized contents
`ear/earWithWar` | Web application ear project
`groovy/customizedLayout` | Groovy project with a custom source layout
`groovy/mixedJavaAndGroovy` | Project containing a mix of Java and Groovy source
`groovy/multiproject` | Build made up of multiple Groovy projects. Also demonstrates how to exclude certain source files, and the use of a custom Groovy AST transformation.
`groovy/quickstart` | Groovy quickstart sample
`java/base` | Java base project
`java/customizedLayout` | Java project with a custom source layout
`java/multiproject` | This sample demonstrates how an application can be composed using multiple Java projects.
`java/quickstart` | Java quickstart project
`java/withIntegrationTests` | This sample demonstrates how to use a source set to add an integration test suite to a Java project.
`maven/pomGeneration` | Demonstrates how to deploy and install to a Maven repository. Also demonstrates how to deploy a javadoc JAR along with the main JAR, how to customize the contents of the generated POM, and how to deploy snapshots and releases to different repositories.
`maven/quickstart` | Demonstrates how to deploy and install artifacts to a Maven repository.
`osgi` | A project which builds an OSGi bundle
`scala/customizedLayout` | Scala project with a custom source layout
`scala/fsc` | Scala project using the Fast Scala Compiler (fsc).
`scala/mixedJavaAndScala` | A project containing a mix of Java and Scala source.
`scala/quickstart` | Scala quickstart project
`scala/zinc` | Scala project using the Zinc based Scala compiler.
`testing/testReport` | Generates an HTML test report that includes the test results from all subprojects.
`toolingApi/customModel` | A sample of how a plugin can expose its own custom tooling model to tooling API clients.
`toolingApi/eclipse` | An application that uses the tooling API to build the Eclipse model for a project.
`toolingApi/idea` | An application that uses the tooling API to extract information needed by IntelliJ IDEA.
`toolingApi/model` | An application that uses the tooling API to build the model for a Gradle build.
`toolingApi/runBuild` | An application that uses the tooling API to run a Gradle task.
`userguide/distribution` | A project which uses the distribution plugin
`userguide/javaLibraryDistribution` | A project which uses the Java library distribution plugin
`webApplication/customized` | Web application with customized WAR contents.
`webApplication/quickstart` | Web application quickstart project

## A.1. Sample `customBuildLanguage`

This sample demonstrates how to add some custom elements to the build DSL. It also demonstrates the use of custom plug-ins to organize build logic.

The build is composed of 2 types of projects. The first type of project represents a product, and the second represents a product module. Each product includes one or more product modules, and each product module may be included in multiple products. That is, there is a many-to-many relationship between these products and product modules. For each product, the build produces a ZIP containing the runtime classpath for each product module included in the product. The ZIP also contains some product-specific files.

The custom elements can be seen in the build script for the product projects (for example, `basicEdition/build.gradle`). Notice that the build script uses the `product { }` element. This is a custom element.

The build scripts of each project contain only declarative elements. The bulk of the work is done by 2 custom plug-ins found in `buildSrc/src/main/groovy`.

## A.2. Sample `customDistribution`

This sample demonstrates how to create a custom Gradle distribution and use it with the Gradle wrapper.

This sample contains the following projects:

- The `plugin` directory contains the project that implements a custom plugin, and bundles the plugin into a custom Gradle distribution.

- The `consumer` directory contains the project that uses the custom distribution.

## A.3. Sample `customPlugin`

A set of projects that show how to implement, test, publish and use a custom plugin and task.

This sample contains the following projects:

- The `plugin` directory contains the project that implements and publishes the plugin.

- The `consumer` directory contains the project that uses the plugin.

## A.4. Sample `java/multiproject`

This sample demonstrates how an application can be composed using multiple Java projects.

This build creates a client-server application which is distributed as 2 archives. First, there is a client ZIP which includes an API JAR, which a 3rd party application would compile against, and a client runtime. Then, there is a server WAR which provides a web service.