anchor.diff:  The Java Platform plugin brings the ability to declare platforms for the Java ecosystem.
   A platform can be used for different purposes:
   
  -- a description of modules which are published together and share the same version (and should be aligned)
  +- a description of modules which are published together and share the same version (and for example, share the same version)
   - a set of recommended versions for heterogeneous libraries. A typical example includes the {spring-boot-bom}[Spring Boot BOM]
   - <<sec:java_platform_consumption,sharing a set of dependency versions>> between subprojects
   
   A platform is a special kind of software component which doesn't contain any sources:
   it is only used to reference other libraries, so that they play well together during dependency resolution.
   
  -Platforms are typically published as {maven-bom}[Maven BOMs] (or with the experimental {metadata-file-spec}[Gradle metadata file] format).
  +Platforms can published as {maven-bom}[Maven BOMs] or with the experimental {metadata-file-spec}[Gradle metadata file] format.
   
   
   [[sec:java_platform_usage]]
  
positive.code: include::sample[dir="java-platform/quickstart/kotlin",files="build.gradle.kts[tags=allow-dependencies]"]
  ====
  
  [NOTE]
  ====
  When published as a BOM file, dependencies do not make sense for Maven consumers.
  They would only be considered by a Gradle consumer if published with Gradle metadata.
  ====
  
  [[sec:java_platform_project_constraints]]
  == Local project constraints
  
  If what you want to build is a platform for a set of libraries built locally, you can declare constraints onto local components, as demonstrated in the following example:
  
  .Allowing declaration of dependencies
  ====
  include::sample[dir="java-platform/multiproject/groovy/platform",files="build.gradle[tags=project-constraints]"]
  
negative.code: include::sample[dir="java-platform/multiproject/kotlin/platform",files="build.gradle.kts[tags=publishing]"]
  ====
  
  This will generate a BOM file for the platform, with a `<dependencyManagement>` block where its `<dependencies>` correspond to the constraints defined in the platform module.
  
  [[sec:java_platform_consumption]]
  == Consuming platforms
  
  Because a Java Platform is a special kind of component, a dependency on a Java platform has to be declared using the `platform` or `enforcedPlatform` keyword, as explained in the <<managing_dependency_configurations.adoc#sec:bom_import,managing transitive dependencies>> section.
  For example, if you want to share dependency versions between subprojects, you can define a platform module which would declare all versions:
  
  .Recommend versions in a platform module
  