maven是一个Jar包的仓库,里面存放各种各样的Jar文件。
在我们的项目中导入一个Jar文件:我们经常使用的Junit包如下所示:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
在这里主要说一下scope这个参数。这个scope表示这个Jar文件的有效范围。
scope的值有以下几个:compile、test、provided、runtime、system。
(1)compile:这个也是scope的默认值,表示这个Jar文件与程序一起进行编译。如果在我们的程序中使用了其他的Jar包,而没有把这个依赖的Jar文件一起进行编译,就会提示:找不到指定的类(Class)。即:将这个依赖的Jar文件放在ClassPath中,从而让我们的程序可以找到这个Jar文件,将我们的程序打成War文件时候,就会将compile的Jar文件也一起放进来。
(2)test:用于表示这个Jar文件只有在test阶段的时候使用,在我们进行·mvn package·的时候,并不会将这个依赖的Jar文件一起进行打包。只有在·mvn test·时候才使用的Jar文件,从而完成我们的测试用例。
(3)provided:provided表示提供,由正式运行环境提供这个Jar文件,本程序不提供。当我们程序想使用某一个类的时候,如果不引入对应的Jar文件,就会提示找不到类,而我们又不想将这个Jar文件一起打包的时候,使用provided。provided这个Jar文件只是让我们的程序可以编译通过,由运行环境提供这个Jar文件。
(4)runtime:在程序运行的时候使用这个Jar文件,而在我们的程序中没有使用Jar文件。例如:我们程序使用了一个第三方Jar文件(A.jar),而这个第三方Jar文件中使用了某一个Jar(B.jar),而B.jar的scope为provided,表示由正式运行程序提供,我们的程序虽然没有使用B.jar中的类,当时我们也必须将B.jar进行依赖,从而使A.jar可以找到B.Jar文件,这时候将B.jar设置为runtime,表示运行时候加入这个Jar文件。这个Jar文件会打包到我们的程序中。
(5)system:与provided相同,只是从运行的系统找对应的Jar文件,必须与<systemPath>配合使用,指定Jar文件所在的位置。
网友评论