tree: 00fed7c9df8192ddcc2c3475e277aec6d86921ef [path history] [tgz]
  1. apply/
  2. jetpad-integration/
  3. plugins/
  4. private/
  5. public/
  6. res/
  7. src/
  8. build.gradle
  9. dependencies.gradle
  10. gradlew
  11. kotlin-dsl-dependency.gradle
  12. lint.xml
  13. lint_samples.xml
  14. out.gradle
  15. OWNERS
  17. repos.gradle
  18. settings.gradle
  19. shared.gradle

This is the buildSrc project. Gradle builds (and tests) this project before the other projects, and Gradle adds its artifacts into the classpath of the other projects when configuring them.

Tests for the buildSrc project are located in the buildSrc-tests project, so that the build doesn't need to wait for those tests to complete

To run these tests you can run ./gradlew :buildSrc-tests:test

For information about Gradle's configuration caching, see:

The buildSrc directory is split into multiple projects based on what needs to be available on the classpath when parsing build.gradle files outside of buildSrc. Any classes that Gradle puts on the classpath for parsing build.gradle files can theoretically overwrite the implementation of tasks in those projects. So, if a class is on that classpath and it changes, then Gradle is not confident that the task is necessarily up-to-date and Gradle will rerun it. So, we move as many classes as possible off of this classpath by applying them from within a separate .gradle script instead.

To verify that classes in private/ don't unnecessarily affect the up-to-datedness status of tasks from outside plugins, try something like this:

  # run a kotlin compilation task
  ./gradlew :core:core:compileDebugKotlin
  # make some unrelated changes in buildSrc:
  sed -i 's/ignoreCase = true/ignoreCase = false/g' buildSrc/private/src/main/kotlin/androidx/build/ErrorProneConfiguration.kt
  # rerun same kotlin compilation task
  ./gradlew :core:core:compileDebugKotlin | cat
  # see that the tasks were up-to-date

See also b/140265324 for more information.