Clone Tools
  • last updated a few seconds ago
Constraints: committers
Constraints: files
Constraints: dates
Replace anonymous by lambda in `LifecycleBasePlugin`

Introduce GradleDistributionsPlugin and multiple distribution projects

We can now have different distributions, containing different sets of

jars/functionality. For this, one subproject per distribution type is

created. Initially we introduce:

- _core_ (absolute minimum needed to run Gradle)

- _basics_ (Basic functionalities on top of core)

- _jvm_ (Everything needed for JVM ecosystem support)

- _native_ (everything for Native support)

- _publishing_ (everything to publish to Maven/Ivy repositories)

This is just an initial structure which we can now easily change. The

main point here is to enable a setup like this at all. New/different

distributions can now simply be added by adding a new subproject that

applies `gradlebuild.distribution.packaging` and defines the content of

the distribution in terms of dependencies.

Projects needing a distribution for testing, then depend on that project

e.g. `integTestDistributionRuntimeOnly(project(":distributionsJvm"))`

While introducing this, a lot of changes/improvements are done.

(See also previous commits and documentation in code.) Some major things:

- The embedded test runner now no longer supports running against a full

distribution as fallback. This has the advantage that we do not need to

assemble the distribution in embedded running, where the huge majority

of tests does not need it. To allow more tests still to run embedded,

the embedded support with TestKit/KotlinDSL involvement has been

improved. Some tests won't run with the embedded runner at all

now, but compared to the overall amount of tests, these are just a few.

And the "forking" tests always run as part of the PR pipeline.

- Cacheability of tests is highly improved. We broke some things

recently when adding inputs for distributed testing.

These regressions are addressed. Other things were

improved along the line (local Tooling API repo no longer uses timestamp

version, local bin distribution without timestamp for wrapper tests,

sample tests no longer rely on absolute path and timestamp version, ...)

- The `docs.jar` is no longer part of the distribution. It almost had no

content and what it had was runtime metadata and not documentation.

Instead, a distribution project now encapsulates all the runtime

metadata creation and produces a `runtime-api-info.jar` that is specific

to the distribution.

- In the past we had flakiness issues causes by different distributions

sharing the same user home/daemon registry. With the fixed set of

distributions defined, we now use different user home/daemon registry

for each distribution.

- Cross-project configurations are removed. There was some code

central to distribution building and runtime metadata generation that

reached into all subprojects. This is now replaced by using proper

variant aware dependency management to share artifacts between

distribution subprojects and the other subprojects.

  1. … 189 more files in changeset.
Capture the plugin or script where an undeclared system property read happens and include this in the problem description.

  1. … 38 more files in changeset.
Add inputs for sample tests (#13153)

Some tests depend on sample directories (for example this one but didn't mark them as inputs. This breaks distributed test.

  1. … 20 more files in changeset.
Skip more software model tests with the configuration cache

Signed-off-by: Paul Merlin <>

  1. … 18 more files in changeset.
Clean up warnings

This includes cleaning up compilation warnings and other warnings from

IDE inspection.

One large area of changes was around having proper @Nullable /

@NonNullApi to clarify nullability.

  1. … 328 more files in changeset.
Apply 'strict-compile' plugin to all subprojects

- Do not apply it anymore to GroovyCompile, as we have almost

no Java classes in Groovy folders left in production code

- Add more 'ignore' options for projects that can not easily made

strict for now

  1. … 24 more files in changeset.
Standardize customModel snippets

  1. … 42 more files in changeset.
Apply the 'classycle' plugin consistently to all projects (#12849)

Existing cycles are now explicitly excluded in the corresponding

build scripts and are thus more visible. They may or may not be

improved on when working on the corresponding project.

  1. … 90 more files in changeset.
Revert "Only register clean task outputs for cleanup if the clean task is configured"

This reverts commit 7246a96d0b19447dab227894d276bff44f49b3a7.

Only register clean task outputs for cleanup if the clean task is configured

Signed-off-by: Paul Merlin <>

Clean up subproject grouping in gradle build

  1. … 143 more files in changeset.
Remove `@Incubating` from LifecycleBasePlugin package

Force AbstractTestDirectoryProvider to use Class (#12431)


This PR adds `className` to `AbstractTestDirectoryProvider` so there'll be no more `unknown-test-class`.

  1. … 405 more files in changeset.
Software Model @UnsupportedWithInstantExecution

Signed-off-by: Paul Merlin <>

  1. … 62 more files in changeset.
Replace several usages of direct `FileCollection` implementation instantiation with a factory method. Attempt to use the public API when the usage lives in a plugin.

  1. … 20 more files in changeset.
Replace some usages of `ArrayList` with `ImmutableList/ImmutableSet` in the `Property` implementations.

  1. … 13 more files in changeset.
Improve documented deprecation warning assertions

Allow using /current/ in the documentation path in the assertion. This will make it easier to read/verify the documentation linked to, while actually asserting against the current version behind the scenes.

  1. … 60 more files in changeset.
Restructure project tree construction so that the containing `ProjectState` for a project is always available, to avoid throwing and then silently ignoring an `IllegalArgumentException` for each project.

Also reuse more project construction logic and remove a bunch of duplicate ad hoc code. This change means that the `ProjectState` object now owns the mutable `Project` object, as was always the intention, rather than existing as a parallel tree. This can continue to evolve so that all access to the mutable project object is mediated by the `ProjectState` that owns it.

  1. … 21 more files in changeset.
Expect deprecation warnings in tests

  1. … 53 more files in changeset.
Refactor `ModuleSource`

The `ModuleSource` concept was a bit messy. It was designed in order

to be able to store the origin of an artifact. Over time, it evolved

into storing more information, like snapshot timestamps, repositories

or content hash.

The code was convoluted because each part of the code was expecting

some kind of module source, but because of delegation, it wasn't

really possible to add/mix more sources.

This commit refactors this concept into a `ModuleSources` concept

which allows storing more information about a module source, in

a safe and consistent manner. No more wrapping/unwrapping, and each

code requiring a specific type of module source can query for it.

  1. … 64 more files in changeset.
Fix all sample references to snippets

  1. … 9 more files in changeset.
make inner classes static where possible

Signed-off-by: Steven Crockett <>

  1. … 42 more files in changeset.
Rename @FailsWithInstantExecution to @ToBeFixedForInstantExecution

Signed-off-by: Paul Merlin <>

  1. … 858 more files in changeset.
Add `BuildServiceParameters.None` marker type that is used to indicate that a build service does not take any parameters, to match the pattern used in other places.

Extract some validation logic from several places so it can be reused in the places where parameterized isolated objects, such as artifact transforms or build services, are registered.

  1. … 35 more files in changeset.
Annotate integ tests failing with instant execution in :platformBase

Signed-off-by: Paul Merlin <>

Deincubate the new C++ and Swift plugins

  1. … 113 more files in changeset.
Fix CustomBinaryTasksIntegrationTest

Polish code

  1. … 2 more files in changeset.
Mark a task as "did work" even when it only deleted stale outputs

  1. … 13 more files in changeset.