Gradle使用两个主要目录来执行和管理其工作: Gradle用户主目录Project根目录 . 以下两节描述了每个文件中存储的内容以及如何清理临时文件和目录.

Gradle user home directory

Gradle用户主目录(默认情况下为$USER_HOME/.gradle )用于存储全局配置属性和初始化脚本以及缓存和日志文件. 它的大致结构如下:

├── caches // (1)
│   ├── 4.8 // (2)
│   ├── 4.9 // (2)
│   ├── ⋮
│   ├── jars-3 // (3)
│   └── modules-2 // (3)
├── daemon // (4)
│   ├── ⋮
│   ├── 4.8
│   └── 4.9
├── init.d // (5)
│   └── my-setup.gradle
├── wrapper
│   └── dists // (6)
│       ├── ⋮
│       ├── gradle-4.8-bin
│       ├── gradle-4.9-all
│       └── gradle-4.9-bin
└── gradle.properties // (7)
  1. 全局缓存目录(适用于所有非项目专用的目录)

  2. 特定于版本的缓存(例如,支持增量构建)

  3. 共享缓存(例如,依赖项的工件)

  4. Gradle守护程序的注册表和日志

  5. Global initialization scripts

  6. Gradle Wrapper下载的发行版

  7. Global Gradle configuration properties

Cleanup of caches and distributions

从版本4.10开始,Gradle会自动清除其用户主目录. 当Gradle守护程序停止或关闭时,清理将在后台运行. 如果使用--no-daemon ,则它将在构建会话后以可视进度指示器在前台运行.

定期(最多每24小时)应用以下清理策略:

  • 检查caches/<gradle-version>/中特定于版本的缓存是否仍在使用中. 如果不是,则在闲置30天后删除发布版本的目录,并在闲置7天后删除快照版本.

  • 检查caches/共享缓存(例如jars-* )是否仍在使用中. 如果没有Gradle版本仍在使用它们,则会将其删除.

  • 当前Gradle版本在caches/使用的共享缓存中的文件(例如jars-3modules-2 )将在上次访问时进行检查. 根据是可以在本地重新创建文件,还是必须再次从远程存储库下载文件,将分别在不访问7天或30天后将其删除.

  • 检查wrapper/dists/中的Gradle分发是否仍在使用中,即是否存在相应的特定于版本的缓存目录. 未使用的发行版将被删除.

Project root directory

项目根目录包含项目中所有的源文件. 此外,它包含Gradle生成的文件和目录,例如.gradlebuild . 通常前者通常签入到源代码管理中,而后者是Gradle用于支持增量构建等功能的临时文件. 总体而言,典型项目根目录的结构大致如下:

├── .gradle // (1)
│   ├── 4.8 // (2)
│   ├── 4.9 // (2)
│   └── ⋮
├── build // (3)
├── gradle
│   └── wrapper  // (4)
├── build.gradle or build.gradle.kts // (5)
├── gradle.properties // (6)
├── gradlew // (7)
├── gradlew.bat // (7)
└── settings.gradle or settings.gradle.kts // (8)
  1. Gradle生成的特定于项目的缓存目录

  2. 特定于版本的缓存(例如,支持增量构建)

  3. Gradle在其中生成所有构建工件的该项目的构建目录.

  4. 包含JAR文件和Gradle包装器的配置

  5. 项目的Gradle构建脚本

  6. Project-specific Gradle configuration properties

  7. 使用Gradle Wrapper执行构建的脚本

  8. 项目的设置文件

Project cache cleanup

从版本4.10开始,Gradle会自动清除特定于项目的缓存目录. 构建项目后,将定期(最多每24小时检查一次) .gradle/<gradle-version>/中特定于版本的缓存目录,以查看它们是否仍在使用中. 如果7天未使用它们,则将其删除.