maven作为比较流程的java项目依赖管理,对java开发者来讲dependency的scope标签并不罕见,例如我们经常会在项目的pom文件中看到类似这样的写法:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
maven的scope,这是很常见的junit依赖,可以看到它使用了scope
来声明它的作用域是test
,那maven有几种作用域,分别是什么?
scope作用域
- compile, 缺省值,适用于所有阶段,即编译、测试、运行、打包。
- provided,类似compile,期望JDK、容器或使用者会提供这个依赖,在编译和测试时使用,在容器启动时如果包含了这个依赖,不会冲突,而是把provided作用域的exclude动作。如servlet-api-2.3.jar。
- runtime, 在运行时使用,如JDBC驱动,适用运行和测试阶段。 如plexus-utils-1.1.jar
- test, 只在测试时使用,用于编译和运行测试代码。不会随项目发布。如Junit-3.8.1.jar
- system, 类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。