anchor.diff:  
    * <<controlling_transitive_dependencies#sec:adding-constraints-transitive-deps,Dependency constraints>>
    * <<migmvn:using_boms,Bills of materials>> (Maven BOMs)
  - * <<controlling_transitive_dependencies#sec:enforcing_dependency_version,Version forcing>>
  + * <<controlling_transitive_dependencies#sec:enforcing_dependency_version,Overriding transitive versions>>
   
   There are even more, specialized options listed in the <<customizing_dependency_resolution_behavior#customizing_dependency_resolution_behavior,Customizing Dependency Resolution Behavior>> chapter.
   
  
positive.code:  * <<working_with_files#sec:creating_archives_example,Creating custom archive tasks>>
   * Using a suitable community plugin from the https://plugins.gradle.org/[Gradle Plugin Portal]
  
  If you're lucky and don't have many plugins or much in the way of customisation in your Maven build, you can simply run
  
  [listing.terminal]
  ----
  
negative.code: ====
  <1> Attaches version 1.2.12 of Log4J to the `implementation` configuration (scope)
  
  The string identifier takes the Maven values of `groupId`, `artifactId` and `version`, although Gradle refers to them as `group`, `module` and `version`.
  
  The above example raises an obvious question: what is that `implementation` configuration?
  It's one of the standard dependency configurations provided by the <<java_plugin#tab:configurations,Java Plugin>> and is often used as a substitute for Maven's default `compile` scope.
  