Maven之Scope详解
程序员文章站
2022-06-07 19:51:38
...
在依赖目录里我们常常看到scope的参数,今天就一起来看看这几个参数具体有什么作用。
- runtime:标注为Runtime的依赖,表示不参与项目的编译过程,只参与项目编译完成后的运行过程,比较典型的例子便是JDBC,它与整个源码的逻辑无关,只是在运行时参与。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
<scope>runtime</scope>
</dependency>
- compile:当我们没有指定scope时,系统默认的便是compile,这意味着该依赖将参与整个项目的编译,运行过程,是比较强的依赖。
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
- provided:标明该文字的依赖意味着,该依赖需要由部署的容器或者JDK来提供。比较好的例子便是web应用部署在服务器上时,服务器本身就有所需的依赖库。provided只适用于编译期和测试期,运行期不需要,并且不是transitive的,这个单词存疑。比如部署到web服务器上,这个依赖只需要参与编译期和测试期,具体运行期服务器自己会提供相关的库。典型的便是servlet。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
- test:标注为test的依赖,只能在运行期间使用,而且仅仅是用于测试,仅适用于执行期间的类路径,不是transitive。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
- system:该标注其实跟provided很像,他们之间最主要的区别便是标注system的是从系统本地引入jar包。所以这里需要注意的是不同机器中的jar包路径的不同。
<dependency>
<groupId>com.baeldung</groupId>
<artifactId>custom-dependency</artifactId>
<version>1.3.2</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/custom-dependency-1.3.2.jar</systemPath>
</dependency>
上一篇: Java8-Optional简单用法
下一篇: [土味]Java遍历无序全排列组合