pom文件dependency中的 scope用法
Posted 流楚丶格念
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pom文件dependency中的 scope用法相关的知识,希望对你有一定的参考价值。
文章目录
scope
在Maven中依赖的域有:compile、provided、runtime、system、test、import
1. compile(默认)
当依赖的scope为compile的时候,那么当前这个依赖的包,会在编译的时候被加⼊进来,并且在打包(mvn package)的时候也会被加⼊进来。
编译范围有效,在编译与打包时都会加⼊进去。
2. provided
当依赖的scope为provided的时候,在编译和测试的时候有效,在执⾏(mvn package)进⾏打包时不会加⼊。
例如:我们开发⼀个web应⽤,在编译时我们需要依赖servlet-api.jar,但是在运⾏时我们不需要该 jar包,因为这个jar 包已由web服务器提供,如果在打包时⼜被加⼊进去,那么就可能产⽣冲突。此时我们就可以使⽤ provided 进⾏范围修饰。
3. system
与provided相同,不过被依赖项不会从maven仓库获取,⽽是从本地⽂件系统拿,需要配合systemPath属性使用。
比如:
<dependency>
<groupId>org.open</groupId>
<artifactId>open-core</artifactId>
<version>1.5</version>
<scope>system</scope>
<systemPath>$basedir/WebContent/WEB-INF/lib/open-core.jar</systemPath>
</dependency>
4. runtime
当依赖的scope为runtime的时候,在运⾏的时候才会依赖,在编译的时候不会依赖。⽐如,在编译的时候我们不需要JDBC API的jar包,⽽在运⾏的时候我们才需要JDBC驱动包。就可以使用runtime修饰。
5. test
当依赖的scope为test的时候,指的的是在测试范围有效,在编译与打包的时候都不会使⽤这个依赖。
6. import
maven多模块项⽬结构中,可以使⽤parent 定义⽗项⽬,实现从⽗项⽬中继承依赖。但maven只能单继承,即⼀个项⽬只能使⽤⼀个parent标签定义⽗项⽬。
maven2.9之后的版本引⼊了⼀个新的功能,可以实现依赖上的多重继承。这个功能可以将依赖配置复杂的pom⽂件拆分成多个独⽴的pom⽂件。这样处理可以使得maven的pom配置更加简洁,同时可以复⽤这些pom依赖。
⽐如,我们在开发spring boot 项⽬的时候,pom中会有如下配置:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
但是,如果该项⽬是个maven⼦模块的话,就会出现问题。由于maven类似java是单继承,不能有两个parent,现在<parent></parent>
标签已经⽤来引⽤⽗模块,现在⼜⽤来引⽤springboot,就会产⽣冲突。
那解决办法就是:使⽤dependencyManagement引⼊dependency,并且把scope属性改为import。如下:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
注意:scope的import 属性只能在<dependencyManagement>
中使⽤,表⽰从其它的pom⽂件中导⼊dependency配置。
以上是关于pom文件dependency中的 scope用法的主要内容,如果未能解决你的问题,请参考以下文章