# IdeaProject

API Documentation: | `IdeaProject`

Enables fine-tuning project details (*.ipr file) of the IDEA plugin.

Example of use with a blend of all possible properties. Typically you don't have configure IDEA module directly because Gradle configures it for you.

    apply plugin: 'java'
    apply plugin: 'idea'

    idea {
      project {
        //if you want to set specific jdk and language level
        jdkName = '1.6'
        languageLevel = '1.5'

        //you can update the source wildcards
        wildcards += '!?*.ruby'

        //you can change the modules of the the *.ipr
        //modules = project(':someProject').idea.module

        //you can change the output file
        outputFile = new File(outputFile.parentFile, 'someBetterName.ipr')
      }
    }

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

beforeMerged and whenMerged closures receive `Project` object

Examples of advanced configuration:

    apply plugin: 'java'
    apply plugin: 'idea'

    idea {
      project {
        ipr {
          //you can tinker with the output *.ipr file before it's written out
          withXml {
            def node = it.asNode()
            node.appendNode('iLove', 'tinkering with the output *.ipr file!')
          }

          //closure executed after *.ipr content is loaded from existing file
          //but before gradle build information is merged
          beforeMerged { project ->
            //you can tinker with Project
          }

          //closure executed after *.ipr content is loaded from existing file
          //and after gradle build information is merged
          whenMerged { project ->
            //you can tinker with Project
          }
        }
      }
    }

### Properties

Property | Description
`ipr` | See `IdeaProject.ipr{}`
`jdkName` | The java version used for defining the project sdk.
`languageLevel` | The java language level of the project. Pass a valid Java version number (e.g. '1.5') or IDEA language level (e.g. 'JDK_1_5').
`modules` | A `ConventionProperty` that holds modules for the ipr file.
`outputFile` | Output *.ipr
`wildcards` | The wildcard resource patterns.

### Property details

#### `XmlFileContentMerger` `ipr` (read-only)

See `IdeaProject.ipr{}`

#### `String` `jdkName`

The java version used for defining the project sdk.

See the examples in the docs for `IdeaProject`

Default with `idea` plugin:
  `'1.6'`
Default with `idea` and `java` plugin:
  `project.sourceCompatibility`

#### `IdeaLanguageLevel` `languageLevel`

The java language level of the project. Pass a valid Java version number (e.g. '1.5') or IDEA language level (e.g. 'JDK_1_5').

See the examples in the docs for `IdeaProject`.

Default with `idea` plugin:
  `'JDK_1_6'`
Default with `idea` and `java` plugin:
  `project.sourceCompatibility`

#### ``List`<`IdeaModule`>` `modules`

A `ConventionProperty` that holds modules for the ipr file.

See the examples in the docs for `IdeaProject`

Default with `idea` plugin:
  `project.allprojects*idea.module`

#### `File` `outputFile`

Output *.ipr

See the examples in the docs for `IdeaProject`.

Default with `idea` plugin:
  ``${project.projectDir}`/`${project.name}`.ipr`

#### ``Set`<`String`>` `wildcards`

The wildcard resource patterns.

See the examples in the docs for `IdeaProject`.

Default with `idea` plugin:
  `['!?*.java', '!?*.groovy']`

### Script blocks

Block | Description
`ipr` | Enables advanced configuration like tinkering with the output xml or affecting the way existing *.ipr content is merged with Gradle build information.

### Script block details

#### `ipr` { }

Enables advanced configuration like tinkering with the output xml or affecting the way existing *.ipr content is merged with Gradle build information.

See the examples in the docs for `IdeaProject`

Delegates to:
  `XmlFileContentMerger` from `ipr`

### Methods

No methods