maven几个依赖生效范围的解释
Maven的生命周期包括:clean、validate、compile、test、package、verify、install、site、deploy,其中需要注意的是:执行后面的命令时,前面的命令自动得到执行,(其中,也可以跳过其中的步骤,如:test,在mvn install或mvn package后加上-Dmaven.test.skip=true或-DskipTests即可)。
生命周期 | 描述 |
---|---|
clean | 清理。遇到问题多清理 |
validate | 验证。验证项目是否正确。 |
compile | 编译。执行编译,源代码编译在此阶段完成。 |
test | 测试。使用适当的单元测试框架(例如JUnit)运行测试。 |
package | 打包。打成jar或war包,其中会自动进行clean+compile。 |
verify | 检查。对集成测试的结果进行检查,以保证质量达标。 |
install | 安装。将本地工程jar包上传安装到本地仓库,以供其他项目使用。 |
site | 站点。进行站点部署。 |
deploy | 部署。拷贝最终的工程包到远程仓库或私服中,以共享给其他开发人员和工程。 |
关于scope依赖范围
Maven的生命周期存在编译、测试、打包这些过程,其中有些依赖只是用于测试,如junit,有些依赖编译时是用不到的,只有运行的时候才能用到,比如mysql的驱动包在编译期就用不到(编译期用的是JDBC接口),而是在运行时用到的。还有些依赖,编译期要用到,而运行期不需要提供,因为有些容器已经提供了,比如servlet-api在tomcat中已经提供了,我们只需要的是编译期提供而已。
其中scope就可以解决上面的问题,即:scope参数用来控制打包的时机,scope有如下几个值,分别代表如下:
依赖范围 | 描述 |
---|---|
compile | 默认的scope,运行期有效,需要打入包中。 |
provided | 编译期有效,运行期不需要提供,不会打入包中。 |
runtime | 编译不需要,在运行期有效,需要导入包中。(接口与实现分离) |
test | 测试需要,不会打入包中。 |
system | 非本地仓库引入、存在系统的某个路径下的jar。(一般不使用) |
参考: