<commit_before>## New and noteworthy

Here are the new features introduced in Gradle 1.2.

### Dependency reports improvements

The dependency report now includes extra information: the requested dependency versions.
This is invaluable information in many situations:

* Conflict resolution. It is now possible to infer from the dependency report why given dependency version is selected.
Previously, the dependency report included the dependency versions *after* the conflict resolution.
The new report makes it much easier to understand what happens during the conflict resolution
and to figure out why and how certain versions are used.
* Dynamic versions. Now the dependency report shows what version was requested and what version was selected.
For example: 1.3.+ -> 1.3.5 (requested -> selected).

In order to keep the report clean and tidy we decided to remove the 'resolved target configurations' from the report.
They used to appear on the right hand of every listed dependency and it was often a source of confusion.
Now the report should be much more readable.

We continue to work in the dependency reports area and plan more interesting features shortly.
For example, we want the report to present the dependency tree even though some dependency is unresolved.
We want to add other kinds of dependency reports, too. Improved dependency report should be also faster for projects that have very large dependency graphs.
Our performance tests for this particular kind of project show ~50% speed increase.

The improvements in the dependency report allows us to design the resolution result API.
For the Gradle user it means better programmatic access and hooks to the resolved dependency graph.

### Experimental resolution result API

We want to expose the API that our dependency reports are using.
This way Gradle users may develop their own dependency reporting driven by custom requirements.
Also it allows the users to develop build logic that can make decisions based on the content of the dependency graph.

The best way to start with the new API is to take a look at the Javadoc
for <a href="http://gradle.org/docs/nightly/javadoc/org/gradle/api/artifacts/ResolvedConfiguration.html#getResolutionResult()">`ResolvedConfiguration.getResolutionResult()`</a>.

### Experimental support for building projects in parallel

Over the coming releases, we'll be adding support for parallel execution of independent projects in a multi-project build. By building separate projects in parallel, Gradle
will enable better hardware utilisation and faster build times.

Gradle 1.2 introduces the first experimental support for this feature, via the `--parallel` and `--parallel-threads` [command-line options](http://gradle.org/docs/nightly/userguide/gradle_command_line.html).
By using these options Gradle will attempt to _execute_ multiple projects in parallel build threads, after first configuring all projects sequentially.

Note that to guarantee successful parallel execution of projects, your multi-project build must contain only [decoupled projects](http://gradle.org/docs/nightly/userguide/multi_project_builds.html#sec:decoupled_projects).
While configuration-time decoupling is not strictly required for parallel project execution, we do not intend on supporting a separate model of decoupling that permits configuration-time
coupling with execution-time decoupling. At this time there are no checks implemented to ensure that projects are decoupled, and unexpected behaviour may result from executing a build with coupled
projects using the new parallel executor.

**This feature is pre-alpha and highly experimental. Many multi-project builds will behave unexpectedly when run using parallel project execution.**

### Documentation facelift

Our documentation has received a facelift to match our new style. Check out the new look [DSL Reference](dsl/index.html) and [User Guide](userguide/userguide.html).

The [DSL Reference](dsl/index.html) now indicates which features are deprecated or experimental.

### HTTP requests now provide Gradle related version information

Gradle, the Gradle Wrapper and the Gradle Tooling API now provide version information in the `User-Agent` header when HTTP resources are accessed.
Especially for larger organisations, this can be very helpful to gather information about which versions of Gradle are used in which environment.

#### What information is provided?

The `User-Agent` header now includes information about

* The used Gradle application (Gradle, Gradle Wrapper or Gradle Tooling API) + Version
* The Operating System (name, version, architecture)
* The Java version (vendor, version)

An example for a Gradle generated user-agent string: "**Gradle/1.2 (Mac OS X;10.8;amd64) (Oracle Corporation;1.7.0_04-ea;23.0-b12)**"

### Lower memory usage

We've continued to improve our dependency resolution engine, so that it now requires much less heap space. A moderately sized multi-project build can
expect to see a 20-25% reduction in heap usage thanks to these improvements.

### Experimental bootstrap plugin

We would like to make it as easy as possible to migrate from a different build tool to Gradle.
This release includes an experimental [Bootstrap plugin](http://gradle.org/docs/nightly/userguide/bootstrap_plugin.html).
However quality-wise it is not yet at the level we expect a Gradle feature to be.
We will continue working on it and with Gradle 1.3 it will be officially announced.

### Configuration option for FindBugs plugin

Thanks to a contribution from [<NAME>](https://github.com/quidryan), the FindBugs plugin now supports more configuration options.

## Fixed Issues

The list of issues fixed between 1.1 and 1.2 can be found [here](http://issues.gradle.org/sr/jira.issueviews:searchrequest-printable/temp/SearchRequest.html?jqlQuery=fixVersion+in+%28%221.2-rc-1%22%29+ORDER+BY+priority&tempMax=1000).

## Upgrading from Gradle 1.1

Please let us know if you encounter any issues during the upgrade to Gradle 1.2, that are not listed below.

### Deprecations
<commit_msg>relative links in the release notes<commit_after>## New and noteworthy

Here are the new features introduced in Gradle 1.2.

### Dependency reports improvements

The dependency report now includes extra information: the requested dependency versions.
This is invaluable information in many situations:

* Conflict resolution. It is now possible to infer from the dependency report why given dependency version is selected.
Previously, the dependency report included the dependency versions *after* the conflict resolution.
The new report makes it much easier to understand what happens during the conflict resolution
and to figure out why and how certain versions are used.
* Dynamic versions. Now the dependency report shows what version was requested and what version was selected.
For example: 1.3.+ -> 1.3.5 (requested -> selected).

In order to keep the report clean and tidy we decided to remove the 'resolved target configurations' from the report.
They used to appear on the right hand of every listed dependency and it was often a source of confusion.
Now the report should be much more readable.

We continue to work in the dependency reports area and plan more interesting features shortly.
For example, we want the report to present the dependency tree even though some dependency is unresolved.
We want to add other kinds of dependency reports, too. Improved dependency report should be also faster for projects that have very large dependency graphs.
Our performance tests for this particular kind of project show ~50% speed increase.

The improvements in the dependency report allows us to design the resolution result API.
For the Gradle user it means better programmatic access and hooks to the resolved dependency graph.

### Experimental resolution result API

We want to expose the API that our dependency reports are using.
This way Gradle users may develop their own dependency reporting driven by custom requirements.
Also it allows the users to develop build logic that can make decisions based on the content of the dependency graph.

The best way to start with the new API is to take a look at the Javadoc
for <a href="javadoc/org/gradle/api/artifacts/ResolvedConfiguration.html#getResolutionResult()">`ResolvedConfiguration.getResolutionResult()`</a>.

### Experimental support for building projects in parallel

Over the coming releases, we'll be adding support for parallel execution of independent projects in a multi-project build. By building separate projects in parallel, Gradle
will enable better hardware utilisation and faster build times.

Gradle 1.2 introduces the first experimental support for this feature, via the `--parallel` and `--parallel-threads` [command-line options](userguide/gradle_command_line.html).
By using these options Gradle will attempt to _execute_ multiple projects in parallel build threads, after first configuring all projects sequentially.

Note that to guarantee successful parallel execution of projects, your multi-project build must contain only [decoupled projects](userguide/multi_project_builds.html#sec:decoupled_projects).
While configuration-time decoupling is not strictly required for parallel project execution, we do not intend on supporting a separate model of decoupling that permits configuration-time
coupling with execution-time decoupling. At this time there are no checks implemented to ensure that projects are decoupled, and unexpected behaviour may result from executing a build with coupled
projects using the new parallel executor.

**This feature is pre-alpha and highly experimental. Many multi-project builds will behave unexpectedly when run using parallel project execution.**

### Documentation facelift

Our documentation has received a facelift to match our new style. Check out the new look [DSL Reference](dsl/index.html) and [User Guide](userguide/userguide.html).

The [DSL Reference](dsl/index.html) now indicates which features are deprecated or experimental.

### HTTP requests now provide Gradle related version information

Gradle, the Gradle Wrapper and the Gradle Tooling API now provide version information in the `User-Agent` header when HTTP resources are accessed.
Especially for larger organisations, this can be very helpful to gather information about which versions of Gradle are used in which environment.

#### What information is provided?

The `User-Agent` header now includes information about

* The used Gradle application (Gradle, Gradle Wrapper or Gradle Tooling API) + Version
* The Operating System (name, version, architecture)
* The Java version (vendor, version)

An example for a Gradle generated user-agent string: "**Gradle/1.2 (Mac OS X;10.8;amd64) (Oracle Corporation;1.7.0_04-ea;23.0-b12)**"

### Lower memory usage

We've continued to improve our dependency resolution engine, so that it now requires much less heap space. A moderately sized multi-project build can
expect to see a 20-25% reduction in heap usage thanks to these improvements.

### Experimental bootstrap plugin

We would like to make it as easy as possible to migrate from a different build tool to Gradle.
This release includes an experimental [Bootstrap plugin](userguide/bootstrap_plugin.html).
However quality-wise it is not yet at the level we expect a Gradle feature to be.
We will continue working on it and with Gradle 1.3 it will be officially announced.

### Configuration option for FindBugs plugin

Thanks to a contribution from [<NAME>](https://github.com/quidryan), the FindBugs plugin now supports more configuration options.

## Fixed Issues

The list of issues fixed between 1.1 and 1.2 can be found [here](http://issues.gradle.org/sr/jira.issueviews:searchrequest-printable/temp/SearchRequest.html?jqlQuery=fixVersion+in+%28%221.2-rc-1%22%29+ORDER+BY+priority&tempMax=1000).

## Upgrading from Gradle 1.1

Please let us know if you encounter any issues during the upgrade to Gradle 1.2, that are not listed below.

### Deprecations

{'fraction_non_alphanumeric': 0.05325345315360293, 'fraction_numerical': 0.009485771342985522, 'mean_word_length': 5.057963709677419, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 13, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5515281', 'n_tokens_mistral': 2912, 'n_tokens_neox': 2773, 'n_words': 1601}