依赖的生命周期
1. 什么是依赖的生命周期
jar文件的生效时间段可以成为依赖的生命周期
2. 依赖的生命周期分类与详解
前三个是常用的依赖生命周期设置,而后两个制作了解即可,几乎用不到!
标识 | 周期 |
---|---|
compile | 缺省值(默认依赖生命周期),适用于所有阶段(测试运行,编译,运行,打包) |
provided | 类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet-api.jar;适用于(测试运行,编译)阶段 |
test | 只在测试时使用,适用于(编译,测试运行)阶段,如 junit.jar |
runtime | 依赖在编译器不使用,只在运行时使用,如 mysql的驱动jar,适用于(运行,测试运行)阶段 |
system | Maven不会在仓库中查找对应依赖,在本地磁盘目录中查找;适用于(编译,测试运行,运行)阶段 |
3. 依赖生命周期的使用
关于依赖生命周期的使用,需要在期望指定生命周期的依赖内添加<scope>标签,在此标签内添加所需依赖标识。
complie
jstl依赖默认没有compile标识的生命周期。因为在依赖中不指定生命周期就是默认指定适用于所有阶段的生命周期,其默认标识为compile。
provided
servlet和jsp依赖默认指定provided标识的生命周期。因为我们在servlet或jsp代码时是需要这两个依赖的,但是我们将项目部署到tomact中,本地tomact目录的lib文件夹下也会有一些jar文件,所以这造成了一种依赖冲突。为了避免这种依赖冲突我们需要指定依赖的生命周期为编译和测试运行阶段。这样我们在书写代码时,编译期也有有依赖可以使用,不会飘红,而在过了编译期后项目部署到了tomact中,该依赖声生命就会被结束掉了,不会影响tomact服务器内置依赖的使用!
test
在maven项目中,项目结构是区分main主文件和test测试文件的。如果我们在使用Junit单元测试时,指定依赖的生命周期为test,那该依赖只适用于test测试文件内,在其他文件的阶段默认没有单元测试的依赖。
简单来说,在test文件夹内创建的测试类,使用@Test注解不会有任何问题。如果换做在main文件夹和其他文件夹中创建测试类,使用@Test注解就会因没有依赖注入而报错。
runtime
我们在添加mysql驱动的依赖时,你会发现它并没有指定生命周期为runtime。这是因为我们在书写jdbc工具类的操作时,如果在编译期没有mysql驱动的依赖,它并不会飘红报错。如果没有依赖只有在我们运行的时候才会发生报错,并告知mysql驱动依赖未找到。所以,这就显得runtime这个依赖生命周期十分的鸡肋。因此,可以不指定该生命周期。
system
当依赖的生命周期设置为system时,表示该依赖项是我们自己提供的,不需要Maven到仓库里面去找。 指定scope为system需要与另一个属性元素
systemPath
一起使用,它表示该依赖项在当前系统的位置,使用的是绝对路径。由于此类依赖不是通过 Maven 仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该慎用。systemPath
元素可以引用环境变量。