- changed 190 files
Introduce GradleDistributionsPlugin and multiple distribution projectsWe can now have different distributions, containing different sets ofjars/functionality. For this, one subproject per distribution type iscreated. 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. Themain point here is to enable a setup like this at all. New/differentdistributions can now simply be added by adding a new subproject thatapplies `gradlebuild.distribution.packaging` and defines the content ofthe distribution in terms of dependencies.Projects needing a distribution for testing, then depend on that projecte.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 fulldistribution as fallback. This has the advantage that we do not need toassemble the distribution in embedded running, where the huge majorityof tests does not need it. To allow more tests still to run embedded,the embedded support with TestKit/KotlinDSL involvement has beenimproved. Some tests won't run with the embedded runner at allnow, 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 thingsrecently when adding inputs for distributed testing.These regressions are addressed. Other things wereimproved along the line (local Tooling API repo no longer uses timestampversion, 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 nocontent and what it had was runtime metadata and not documentation.Instead, a distribution project now encapsulates all the runtimemetadata creation and produces a `runtime-api-info.jar` that is specificto the distribution.- In the past we had flakiness issues causes by different distributionssharing the same user home/daemon registry. With the fixed set ofdistributions defined, we now use different user home/daemon registryfor each distribution.- Cross-project configurations are removed. There was some codecentral to distribution building and runtime metadata generation thatreached into all subprojects. This is now replaced by using propervariant aware dependency management to share artifacts betweendistribution subprojects and the other subprojects.