anchor.diff:  [[fixing-bad-metadata]]
   == Fixing bad metadata
   
  -include:component-metadata-rules[leveloffset=+2]
  -
  +include::component_metadata_rules.adoc[leveloffset=+2]
  +
  
positive.code: == Handling mutually exclusive dependencies
  
  [[sec:capabilities]]
  === Component capabilities
  
  ==== Introduction to capabilities
  
  Often a dependency graph would accidentally contain multiple implementations of the same API.
  This is particularly common with logging frameworks, where multiple bindings are available, and that one library chooses a binding when another transitive dependency chooses another.
  
negative.code: However, tasks to build the replaced dependency will not be executed in order to resolve the depending `Configuration`.
  
  [[sec:conditional_dependency_substitution]]
  ==== Conditionally substituting a dependency
  
  A common use case for dependency substitution is to allow more flexible assembly of sub-projects within a multi-project build.
  This can be useful for developing a local, patched version of an external dependency or for building a subset of the modules within a large multi-project build.
  