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. compileClasspath
和 runtimeClasspath
- 这两个配置项不直接出现在
dependencies
块中,但它们用于控制类路径的组成。Gradle 会自动基于implementation
和其他依赖声明来生成类路径。
10. enforcedPlatform
和 platform
enforcedPlatform 'org.springframework.boot:spring-boot-dependencies:2.4.3'
platform 'org.springframework.boot:spring-boot-dependencies:2.4.3'
作用:
platform
和enforcedPlatform
用于声明 BOM(Bill of Materials)依赖。platform
允许某些依赖的版本由 BOM 控制,但可以在项目中自由选择不同的版本。enforcedPlatform
强制使用 BOM 中定义的版本,确保项目中的所有依赖项都使用相同版本。
使用场景:
- 用于在项目中标准化依赖项的版本,通常用于大型企业项目或 Spring Boot 项目。
11. implementation vs compile
(Gradle 3.4 之前使用的配置)
implementation
是compile
的替代品。自 Gradle 3.4 开始,compile
被弃用,implementation
是推荐的替代方案,提供了更好的依赖隔离。
总结
dependencies
块中的不同配置允许你根据项目的需要,精确地控制依赖项的作用范围和行为。这些配置有助于优化类路径管理、减少编译时间、并保持运行时环境的最小化。