Add `ConfigurableFileCollection.finalizeValue()` to allow the value of the file collection to be finalized. The initial implementation is too eager, in that it calculates all of the files of the collection. Instead, it should calculate and finalize all of the roots of the collection. Later commits will improve this.
Add support for Java test fixtures This commit introduces conventional support for _test fixtures_ in the Java ecosystem.
The `java` extension, available when applying either the `java` or `java-library` plugins, now adds a couple of methods:
- `enableTestFixtures`, which will create an additional source set for test fixtures - `usesTestFixturesOf`, which declares that this project makes use of the test fixtures of another project or external module
This feature builds on top of the existing feature variant infrastructure, which means that:
- test fixtures are published (as optional dependencies in Maven, as variants with Gradle metadata) - test fixtures have a conventional capability
The capability for test fixtures is `test-fixtures`, so it means that if the project has a name `foo`, then its test fixtures would be published with a capability name of `foo-test-fixtures`.
Test fixtures expose an API and an implementation, available through the `testFixturesApi` and `testFixturesImplementation` configurations.
When test fixtures are enabled, the test fixtures API automatically gets a dependency onto the main component (aka `src/main/java`).