依赖范围
通过设置坐标的依赖范围(scope),可以设置 对应jar包的作用范围:编译环境、测试环境、运行环境。
如下图所示给 junit
依赖通过 scope
标签指定依赖的作用范围。 那么这个依赖就只能作用在测试环境,其他环境下不能使用。
那么 scope
都可以有哪些取值呢?
依赖范围 | 编译classpath | 测试classpath | 运行classpath | 例子 |
---|---|---|---|---|
compile | Y | Y | Y | logback |
test | - | Y | - | Junit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | jdbc驱动 |
system | Y | Y | - | 存储在本地的jar包 |
- compile :作用于编译环境、测试环境、运行环境。
- test : 作用于测试环境。典型的就是Junit坐标,以后使用Junit时,都会将scope指定为该值
- provided :作用于编译环境、测试环境。我们后面会学习
servlet-api
,在使用它时,必须将scope
设置为该值,不然运行时就会报错 - runtime : 作用于测试环境、运行环境。jdbc驱动一般将
scope
设置为该值,当然不设置也没有任何问题
注意:
- 如果引入坐标不指定
scope
标签时,默认就是 compile 值。以后大部分jar包都是使用默认值。
其中对几个环境进行解释:
编译classpath:
是指在main包下可以引用到该依赖包~
测试classpath:
是指在test包下 , 是指该依赖是可以在test包下引用到
运行时classpath:
是指在我们打包时, 包里面会包含这个依赖, 把这个依赖打进去。
相反, 如果我们所选的这个scope
中不包含我们的运行时classpath, 那么就会在打包后的依赖中看不到这个依赖。
比如我们的scope
如果设置的是provide
, 那么就在打好的包中是看不到这个依赖的。
多环境配置步骤
多环境配置有什么好处?
- maven提供配置多种环境的设定,帮助开发者使用过程中快速切换环境
定义多环境
<!--定义多环境-->
<profiles>
<!--定义具体的环境:生产环境-->
<profile>
<!--定义环境对应的唯一名称-->
<id>env_dep</id>
<!--定义环境中专用的属性值-->
<properties>
<jdbc.url>jdbc:mysql://127.0.0.1:3306/ssm_db</jdbc.url>
</properties>
<!--设置默认启动-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!--定义具体的环境:开发环境-->
<profile>
<id>env_pro</id>
……
</profile>
</profiles>
2.2 使用多环境(构建过程)
【命令】:
mvn 指令 –P 环境定义id
【范例】:
mvn install –P pro_env