title: Can I get more information about "implicit dependencies" in Gradle 7.0?
body: <p>[ Updated 16 April 2021, see reproducible test case below.]</p>
  <p>I started converting a small Gradle build to Gradle 7.0. It says:</p>
  <pre><code>&gt; Task :junit_xsd
  Execution optimizations have been disabled for task ':junit_xsd' to ensure correctness due to the following reasons:
    - Gradle detected a problem with the following location: '/Users/ndw/Projects/xproc/test-suite/build'. Reason: Task ':git_log_shorter' uses this output of task ':junit_xsd' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed. Please refer to https://docs.gradle.org/7.0/userguide/validation_problems.html#implicit_dependency for more details about this problem.
  </code></pre>
  <p>I've looked at the documentation link and it wasn't very informative (to me).</p>
  <p>The two tasks in question are, AFAICT, unrelated. <code>junit_xsd</code> is a simple copy task:</p>
  <pre><code>task junit_xsd(type: Copy) {
    from &quot;src/main/schema/&quot;
    into &quot;build/&quot;
    include &quot;*.xsd&quot;
  }
  </code></pre>
  <p>The <code>git_log_shorter</code> task is a bit harder to describe. It's a custom task that runs a process I wrote.</p>
  <pre><code>task git_log_shorter(dependsOn: [&quot;git_log_summary&quot;], type: XMLCalabashTask) {
    inputs.file &quot;tools/xsl/shorter-log.xsl&quot;
    inputs.file &quot;build/git-log-summary.xml&quot;
    outputs.file &quot;build/git-log-shorter.xml&quot;
    input(&quot;source&quot;, &quot;build/git-log-summary.xml&quot;)
    output(&quot;result&quot;, &quot;build/git-log-shorter.xml&quot;)
    pipeline &quot;tools/xpl/run-xslt.xpl&quot;
    option(&quot;stylesheet&quot;, &quot;../xsl/shorter-log.xsl&quot;)
  }
  </code></pre>
  <p>But it doesn't read any <code>xsd</code> files, so I can't work out why Gradle thinks there's an implicit dependency on <code>junit_xsd</code>.</p>
  <p>I mean, I suppose it reads out of the <code>build</code> directory, but I have lots of tasks that create and use temporary files from the <code>build</code> directory. I'll be a little shocked if <em>any</em> task that reads from the <code>build</code> directory is now implicitly dependent on <em>every</em> task that writes to it.</p>
  <p>If that is the case, what's the proposed solution for temporary files?</p>
  <p>The <code>git_log_summary</code> task, for example, is the task that writes <code>build/git-log-summary.xml</code> and I have an explicit dependency for that task.</p>
  <p>Am I overlooking something obvious?</p>
  <p>Here's a test case that doesn't involve any extension steps. Running the <code>doall</code> task produces the warning:</p>
  <pre><code>task doall(dependsOn: [&quot;copyA&quot;, &quot;pointless_gzip&quot;]) {
    // nop
  }
  
  task copyA(type: Copy) {
    from &quot;src/main/data/&quot;
    into &quot;${buildDir}&quot;
    include &quot;*.xsd&quot;
  }
  
  task pointless_tar(type: Exec) {
    outputs.file &quot;${buildDir}/pointless.tar&quot;
    commandLine 'tar', '-cf', &quot;${buildDir}/pointless.tar&quot;, 'src'
    doFirst {
      mkdir(&quot;${buildDir}&quot;)
    }
  }
  
  task pointless_gzip(dependsOn: [&quot;pointless_tar&quot;], type: Exec) {
    inputs.file &quot;${buildDir}/pointless.tar&quot;
    outputs.file &quot;${buildDir}/pointless.tar.gz&quot;
    commandLine 'gzip', '-k', &quot;${buildDir}/pointless.tar&quot;
  }
  </code></pre>