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用法的主要内容,如果未能解决你的问题,请参考以下文章

pom.xml文件中dependency标签的scope子标签

pom文件中scope标签基本解释

高效开发:pom依赖中的scope属性如何写

高效开发:pom依赖中的scope属性如何写

Maven Dependency Scope用法

maven依赖 dependency中scope=compile 和 provided区别