Skip to main content

Gradle项目配置文件-dependencies块

dependencies 块是 Gradle 构建脚本中用于声明项目所需外部库或模块的部分。它支持不同的配置来控制依赖项在构建生命周期中的作用方式。以下是 dependencies 中所有常见配置的详细说明:

1. implementation

implementation 'org.springframework.boot:spring-boot-starter-web:3.0.0'

作用:

  • implementation 配置声明了项目的运行时和编译时依赖。它是最常用的依赖配置之一。
  • 任何通过 implementation 声明的库都会在项目编译和运行时自动加载。
  • 这种配置隐藏了它依赖的传递性依赖(transitive dependencies)细节,减少了其他模块重新编译的次数。

使用场景:

  • 项目需要在运行时和编译时都使用的库,例如第三方库、框架等。

2. api

api 'org.apache.commons:commons-math3:3.6.1'

作用:

  • api 配置类似于 implementation,但其依赖的传递性依赖会暴露给依赖该模块的其他模块。
  • 当你希望一个库的 API 在下游模块(依赖你的模块的项目)中可见时,使用 api

使用场景:

  • 当你构建一个库或模块,并希望它的用户可以直接访问其中的依赖项。

3. compileOnly

compileOnly 'org.projectlombok:lombok:1.18.20'

作用:

  • compileOnly 配置声明了仅在编译时需要的依赖,编译后的代码不会包含这些依赖。
  • 这些库不会在运行时引入,因此运行时类路径中不会包含它们。

使用场景:

  • 用于在编译时注解处理工具(如 Lombok),或者在运行时由某些框架动态加载的库。

4. runtimeOnly

runtimeOnly 'mysql:mysql-connector-java:8.0.23'

作用:

  • runtimeOnly 配置声明了仅在运行时需要的依赖,不会参与项目的编译。
  • 这些依赖通常是数据库驱动、日志库等仅在运行时需要加载的库。

使用场景:

  • 当库只在项目运行时需要,而不需要在编译时参与。

5. testImplementation

testImplementation 'junit:junit:4.12'

作用:

  • testImplementation 配置声明了在测试阶段需要的依赖,通常是测试框架(如 JUnit、Mockito)和工具。
  • 它的作用范围仅限于测试代码,不会被包含在应用的运行时类路径中。

使用场景:

  • 用于声明测试代码所需的库和工具。

6. testCompileOnly

testCompileOnly 'org.projectlombok:lombok:1.18.20'

作用:

  • testCompileOnly 配置声明了仅在测试代码编译时需要的依赖,类似于 compileOnly,但作用范围仅限于测试代码。

使用场景:

  • 用于声明测试编译阶段需要但不需要在运行时加载的依赖。

7. testRuntimeOnly

testRuntimeOnly 'org.h2database:h2:1.4.200'

作用:

  • testRuntimeOnly 配置声明了仅在测试运行时需要的依赖,不会在测试代码编译时参与。

使用场景:

  • 用于声明测试运行时需要的数据库、工具或其他运行时库。

8. annotationProcessor

annotationProcessor 'org.projectlombok:lombok:1.18.20'

作用:

  • annotationProcessor 配置声明了在编译期间进行注解处理的库,通常用于生成代码(如 Lombok)。
  • 它是在编译期生效的,不会参与到运行时类路径中。

使用场景:

  • 当项目使用注解处理器生成代码(如自动生成 Getter/Setter、构造函数等)。

9. compileClasspathruntimeClasspath

  • 这两个配置项不直接出现在 dependencies 块中,但它们用于控制类路径的组成。Gradle 会自动基于 implementation 和其他依赖声明来生成类路径。

10. enforcedPlatformplatform

enforcedPlatform 'org.springframework.boot:spring-boot-dependencies:2.4.3'
platform 'org.springframework.boot:spring-boot-dependencies:2.4.3'

作用:

  • platformenforcedPlatform 用于声明 BOM(Bill of Materials)依赖。
  • platform 允许某些依赖的版本由 BOM 控制,但可以在项目中自由选择不同的版本。
  • enforcedPlatform 强制使用 BOM 中定义的版本,确保项目中的所有依赖项都使用相同版本。

使用场景:

  • 用于在项目中标准化依赖项的版本,通常用于大型企业项目或 Spring Boot 项目。

11. implementation vs compile (Gradle 3.4 之前使用的配置)

  • implementationcompile 的替代品。自 Gradle 3.4 开始,compile 被弃用,implementation 是推荐的替代方案,提供了更好的依赖隔离。

总结

dependencies 块中的不同配置允许你根据项目的需要,精确地控制依赖项的作用范围和行为。这些配置有助于优化类路径管理、减少编译时间、并保持运行时环境的最小化。