欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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>