anchor.diff:              <output args="-q hello"/>
           </sample>
   ++++
  -
  -The example above uses instances of api:org.gradle.api.provider.Provider[] and api:org.gradle.api.provider.Property[]. The main difference between these two interfaces is attributed to mutability. A api:org.gradle.api.provider.Provider[] is immutable and can be created with the method api:org.gradle.api.Project#provider(java.util.concurrent.Callable)[]. api:org.gradle.api.provider.Property[] extends the interface api:org.gradle.api.provider.Provider[], represents a mutable value and can be created with the method api:org.gradle.api.Project#property(java.lang.Class)[]. Please note that the provider types are not intended for implementation by build script or plugin authors.
  -
  -[NOTE]
  -====
  -
  -The api:org.gradle.api.Project[] does not provide a specific method signature for creating a provider by passing in a `groovy.lang.Closure` as parameter. When writing a plugin implementation with Groovy, you can use the method signature accepting a `java.util.concurrent.Callable` parameter. Groovy's http://docs.groovy-lang.org/next/html/documentation/core-semantics.html#_assigning_a_closure_to_a_sam_type[Closure to type coercion] will take of the rest.
  -
  -====
  -
   
   [[sec:custom_plugins_standalone_project]]
   === A standalone project
  
positive.code: 
  Capturing user input from the build script through an extension and mapping it to input/output properties of a custom task is considered a best practice. The end user only interacts with the exposed DSL defined by the extension. The imperative logic is hidden in the plugin implementation.
  
  The extension declaration in the build script as well as the mapping between extension properties and custom task properties occurs during Gradle's configuration phase of the build lifecycle. To avoid evaluation order issues, the actual value of a mapped property has to be resolved during the execution phase. For more information please see <<sec:build_phases>>. Gradle's API offers the mutable type api:org.gradle.api.provider.Property[] for representing a property that should be lazily evaluated e.g. during execution time. The method api:org.gradle.api.provider.Property#set(T)[] provides the value, api:org.gradle.api.provider.Provider#get()[] returns the value upon request.
  
  The following demonstrates the usage of the type for mapping an extension property to a task property:
  
  
negative.code:             </sample>
  ++++
  
  The api:org.gradle.api.Project#container(java.lang.Class)[] methods create instances of api:org.gradle.api.NamedDomainObjectContainer[], that have many useful methods for managing and configuring the objects. In order to use a type with any of the `project.container` methods, it MUST expose a property named "`name`" as the unique, and constant, name for the object. The `project.container(Class)` variant of the container method creates new instances by attempting to invoke the constructor of the class that takes a single string argument, which is the desired name of the object. See the above link for `project.container` method variants that allow custom instantiation strategies.
  