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

maven scope,provided和compile区别,optional,classifier,systemPath等用法介绍

程序员文章站 2022-06-07 19:50:19
...

maven生命周期介绍

编译(mvn compile)
测试(mvn test-compile和mvn test)
打包(mvn package和mvn install和mvn deploy)
运行(mvn exec)

scope介绍

compile

默认scope,参与编译、测试、打包、运行。

test

仅参与测试。

runtime

参与打包与运行,但不参与编译(也就是在开发时不能直接用,只能通过反射才能使用,常用于jdbc实现库)。

provided

参与编译、测试、运行,但不会被打包进jar或war(也就是说,运行时由别人提供,常用于应用服务器已经提供的库,如jsp相关库、servlet相关库)。

system

与compile相同,但不从maven仓库中下载,而是从systemPath属性进行获取。
必须配合systemPath属性一起使用。

import

只在dependencyManagement的中使用,能解决maven单继承问题,import依赖关系实际上并不参与限制依赖关系的传递性。

systemPath介绍

必须配合<scope>system</scope>使用
示例:

<dependency>
			<groupId>com.aliyun</groupId>
			<artifactId>aliyun-java-sdk-core</artifactId>
			<version>4.1.0</version>
			<scope>system</scope>
			<systemPath>${project.basedir}/lib/aliyun-java-sdk-core-4.1.0.jar</systemPath>
		</dependency>

${project.basedir}表示项目根目录。

optional介绍

当该依赖成为间接依赖时,是否让该依赖不成为强制依赖。
例如,a依赖b,b依赖c,
在b项目中,使用optional为true方式依赖c,那么a项目打包时,可选是否打包c,
如果b项目中,使用optional为false方式依赖c,那么a项目打包时,必须将c打包进去。

classifier介绍

指定使用哪个版本的jdk来编译此依赖。

<classifier>jdk15</classifier>

exclusions和exclusion介绍

剔除当前依赖中指定的依赖。

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<exclusions>
				<!-- 剔除logging -->
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-logging</artifactId>
				</exclusion>
				<!-- 剔除tomcat -->
				<exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion>
			</exclusions>
		</dependency>
相关标签: Maven maven