作用:依赖在编译、测试和运行时都可用,且会被打包到最终产物中。
适用场景:项目核心功能所需的依赖,例如 Spring Boot 的核心库。
传递性:会传递给下游项目。
示例:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <scope>compile</scope> *<!-- 可省略,因为是默认值 -->* </dependency>
作用:依赖在编译和测试时可用,但运行时由容器或环境提供,不会打包到最终产物中。
适用场景:运行时由 JDK 或容器(如 Servlet 容器)提供的依赖,例如 javax.servlet-api。
传递性:不会传递给下游项目。
示例:
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency>
注意:如果运行时环境未提供该依赖,会导致 ClassNotFoundException。
作用:依赖在运行时和测试时需要,但编译时不需要,会打包到最终产物中。
适用场景:运行时动态加载的库,例如 JDBC 驱动(编译时只需接口,运行时需要具体实现)。
传递性:会传递给下游项目。
示例:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> <scope>runtime</scope> </dependency>