anchor.diff:  
   With the existing API, this example adds two tasks (`foo` and `bar`):
   
  +====
  +[.multi-language-sample]
  +=====
  +.build.gradle
   [source, groovy]
   ----
   tasks.create("foo") {
       tasks.create("bar")
   }
   ----
  +=====
  +[.multi-language-sample]
  +=====
  +.build.gradle.kts
  +[source,kotlin]
  +----
  +tasks.create("foo") {
  +    tasks.create("bar")
  +}
  +----
  +=====
  +====
   
   When converting this to use the new API, something surprising happens: `bar` doesn't exist.  The new API only executes configuration actions when necessary,
   so the `register()` for task `bar` only executes when `foo` is configured.
   
  +====
  +[.multi-language-sample]
  +=====
  +.build.gradle
   [source, groovy]
   ----
   tasks.register("foo") {
       tasks.register("bar") // WRONG
   }
   ----
  +=====
  +[.multi-language-sample]
  +=====
  +.build.gradle.kts
  +[source,kotlin]
  +----
  +tasks.register("foo") {
  +    tasks.register("bar") // WRONG
  +}
  +----
  +=====
  +====
   
   To avoid this, Gradle now detects this and prevents modification to the underlying container (through `create()` or `register()`) when using the new API.
   
  
positive.code:     }
  }
  ----
  
  If that assumption is incorrect or might possibly be incorrect in the future, the `artifactId` must be set within an `afterEvaluate {}` block, like so:
  
  
  [source,groovy]
  ----
  subprojects {
      publishing {
  
negative.code:     doLast { ... }
  }
  ----
  =====
  [.multi-language-sample]
  =====
  .build.gradle.kts
  [source,kotlin]
  ----
  class MyTask : DefaultTask() {
      @OutputFile // property needs an annotation
      val outputFile: RegularFileProperty = project.objects.fileProperty()
  }
  
  task("myOtherTask") {
      val outputFile = project.objects.fileProperty()
      outputs.file(outputFile) // or to be registered using the runtime API
      doLast { ... }
  }
  ----
  =====
  ====
  
  [[rel5.0:jaxb_and_java9]]
  === [5.0] Gradle now bundles JAXB for Java 9 and above
  