maven当中的依赖范围, 使用scope表示。
scope的值有 compile, test, provided ,默认是compile
scope:表示依赖使用的范围,也就是在maven构建项目的哪些阶段(maven构建项目清理 编译, 测试 ,打包, 安装 ,部署)中起作用。
test范围
例如:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
junit的依赖范围是 test,那说明和junit的测试代码在执行测试阶段的时候,在测试阶段才有效,而在其他阶段是没有作用的(也可以认为在idea创建maven项目当中,只能在绿色的test文件夹下使用)。
compile范围
而compile范围指的是在 清理 编译, 测试 ,打包, 安装 ,部署阶段 都得有这个坐标依赖,否则代码就编译不了。
例如 我们pom文件当中:指定范围compile
对项目进行打包,打包后,解压war 发现打包的文件当中存在我们在项目当中引入的相关依赖jar
provided范围
而provided范围指的是 在清理 编译, 测试阶段 都得有这个坐标依赖,而在打包, 安装 ,部署不需要使用
例如 我们pom文件当中:指定范围provided
打包后,解压war文件 发现并没有我们在项目当中引入的相关的依赖jar
总结:
依赖的范围:
compile:默认的,如果没写scope那么默认就是compile,编译时有效、测试时有效、运行时有效,一般的jar包都是这个范围
test: 编译时无效、测试时有效、运行时无效,一般只有Junit单元测试的jar包。说白了只在test/java文件夹中使用的jar
provided: 编译时有效、测试时有效、运行时无效,运行时不需要的jar包,一般tomcat自己提供的jar我们都会声明provided,因为,编译和测试都在本地,我们需要jar,但是我们打包的项目最终是部署运行在tomcat上,tomcat提供了我们声明provided的jar了,所以我们就不需要
runtime: 编译时无效、测试时有效、运行时有效, 编译时不会使用的jar包 比如mysql驱动、比如Lombok