pom-scope-optional标签
2022-04-01 本文已影响0人
君子兰琚琚
一、<scope>标签:
mavne工程A,引入依赖B。<scope>标签:设置B的作用范围,一个有如下几个作用范围:
1. compile
默认值,表示依赖要参与编译、测试、运行,打包时要包含进去
2. test
依赖仅参与测试相关工作,包括测试代码的编译和执行,不会被打包,例如:junit
3. runtime
依赖不参加编译,但参与测试、运行。与compile相比,跳过编译。例如JDBC驱动,适用运行和测试阶段
4. provided
相当于compile,但不参与打包
5. system
从参与度说和provided相同,但依赖不会从中央库下载,从本地文拿,需添加systemPath属性定义路径
注:scope依赖传递
为:test、provided时,表示该依赖不传递,例如:
<dependency>
<groupId>a.b</groupId>
<artifactId>spring-boot-xo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>provided</scope>
<!-- test/provided表示spring-boot-x0不传递,只应用于当前工程-->
</dependency>
二、<optional>标签
控制被它修饰的依赖是否可传递--- true不可传递,false可传递。它和scope决策权相等,可相互否定。
例1:
<dependency>
<groupId>a.b</groupId>
<artifactId>cX01</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope><!--默认compile,可传递-->
<optional>false</optional><!--默认false,可传递-->
<!-- 本例中:scope & optional 都同意依赖传递,cX01可传递 -->
</dependency>
例2:
<dependency>
<groupId>a.b</groupId>
<artifactId>cX01</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope><!--默认compile,可传递-->
<optional>true</optional><!--true,不可传递-->
<!-- 本例中:scope可传递 & optional不可传递,cX01不可传递 -->
</dependency>
例3:
<!-- 感觉一般也没人这么写,只是举例 -->
<dependency>
<groupId>a.b</groupId>
<artifactId>cX01</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>provided</scope><!--provided,不可传递-->
<optional>false</optional><!--false,可传递-->
<!-- 本例中:scope不可传递 & optional可传递,cX01不可传递 -->
</dependency>