# EclipseClasspath

API Documentation: | `EclipseClasspath`

Enables fine-tuning classpath details (.classpath file) of the Eclipse plugin

Example of use with a blend of all possible properties. Bear in mind that usually you don't have configure eclipse classpath directly because Gradle configures it for free!

    apply plugin: 'java'
    apply plugin: 'eclipse'

    configurations {
      provided
      someBoringConfig
    }

    eclipse {

      //if you want parts of paths in resulting file to be replaced by variables (files):
      pathVariables 'GRADLE_HOME': file('/best/software/gradle'), 'TOMCAT_HOME': file('../tomcat')

      classpath {
        //you can tweak the classpath of the eclipse project by adding extra configurations:
        plusConfigurations += configurations.provided

        //you can also remove configurations from the classpath:
        minusConfigurations += configurations.someBoringConfig

        //if you don't want some classpath entries 'exported' in eclipse
        noExportConfigurations += configurations.provided

        //if you want to append extra containers:
        containers 'someFriendlyContainer', 'andYetAnotherContainer'

        //customizing the classes output directory:
        defaultOutputDir = file('build-eclipse')

        //default settings for dependencies sources/javadoc download:
        downloadSources = true
        downloadJavadoc = false
      }
    }

For tackling edge cases users can perform advanced configuration on resulting xml file. It is also possible to affect the way eclipse plugin merges the existing configuration via beforeMerged and whenMerged closures.

beforeMerged and whenMerged closures receive `Classpath` object

Examples of advanced configuration:

    apply plugin: 'java'
    apply plugin: 'eclipse'

    eclipse {
      classpath {
        file {
          //if you want to mess with the resulting xml in whatever way you fancy
          withXml {
            def node = it.asNode()
            node.appendNode('xml', 'is what I love')
          }

          //closure executed after .classpath content is loaded from existing file
          //but before gradle build information is merged
          beforeMerged { classpath ->
            //you can tinker with the Classpath here
          }

          //closure executed after .classpath content is loaded from existing file
          //and after gradle build information is merged
          whenMerged { classpath ->
            //you can tinker with the Classpath here
          }
        }
      }
    }

### Properties

Property | Description
`containers` | Containers to be added to the classpath
`defaultOutputDir` | The default output directory where eclipse puts compiled classes
`downloadJavadoc` | Whether to download and add javadocs associated with the dependency jars. Defaults to false.
`downloadSources` | Whether to download and add sources associated with the dependency jars. Defaults to true.
`file` | See `EclipseClasspath.file()`
`minusConfigurations` | The configurations which files are to be excluded from the classpath entries.
`plusConfigurations` | The configurations which files are to be transformed into classpath entries.

### Property details

#### ``Set`<`String`>` `containers`

Containers to be added to the classpath

For example see docs for `EclipseClasspath`

Default with `eclipse` and `java` plugins:
  [JRE container]

#### `File` `defaultOutputDir`

The default output directory where eclipse puts compiled classes

For example see docs for `EclipseClasspath`

Default with `eclipse` and `java` plugins:
  ``${project.projectDir}`/bin`

#### `boolean` `downloadJavadoc`

Whether to download and add javadocs associated with the dependency jars. Defaults to false.

For example see docs for `EclipseClasspath`

Default with `eclipse` and `java` plugins:
  `false`

#### `boolean` `downloadSources`

Whether to download and add sources associated with the dependency jars. Defaults to true.

For example see docs for `EclipseClasspath`

Default with `eclipse` and `java` plugins:
  `true`

#### `XmlFileContentMerger` `file`

See `EclipseClasspath.file()`

#### ``Collection`<`Configuration`>` `minusConfigurations`

The configurations which files are to be excluded from the classpath entries.

For example see docs for `EclipseClasspath`

Default with `eclipse` and `java` plugins:
  `[]`

#### ``Collection`<`Configuration`>` `plusConfigurations`

The configurations which files are to be transformed into classpath entries.

For example see docs for `EclipseClasspath`

Default with `eclipse` and `java` plugins:
  `project.configurations.testRuntime`

### Script blocks

Block | Description
`file` | Enables advanced configuration like tinkering with the output xml or affecting the way existing .classpath content is merged with gradle build information

### Script block details

#### `file` { }

Enables advanced configuration like tinkering with the output xml or affecting the way existing .classpath content is merged with gradle build information

The object passed to whenMerged{} and beforeMerged{} closures is of type `Classpath`

For example see docs for `EclipseProject`

Delegates to:
  `XmlFileContentMerger` from `file`

### Methods

Method | Description
`containers(containers)` | Adds containers to the .classpath.

### Method details

#### `void` `containers`(``String`...` containers)

Adds containers to the .classpath.

For example see docs for `EclipseClasspath`