# Appendix B. 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 B.1. Samples included in the distribution

Sample | Description
`announce` | A project which uses the announce plugin
`codeQuality` | A project which uses the code quality plugin.
`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.
`customPlugin` | A project which implements a custom plugin and task.
`groovy/customizedLayout` | Groovy project with a custom source layout
`groovy/groovy-1.5.6` | Groovy project using Groovy 1.5.6
`groovy/groovy-1.6.7` | Groovy project using Groovy 1.6.7
`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/mixedJavaAndScala` | A project containing a mix of Java and Scala source.
`scala/quickstart` | Scala quickstart project
`webApplication/customised` | Web application with customized WAR contents.
`webApplication/quickstart` | Web application quickstart project

## B.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`.

## B.2. 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.