Maven中的scope总结
2023-12-22 20:48 l_v_y_forever 阅读(793) 评论(0) 编辑 收藏 举报转载自:https://blog.csdn.net/qgnczmnmn/article/details/118050472
Maven中的scope主要有以下6种,接下来分别介绍下这几种scope:
- compile
不声明scope元素的情况下的默认值;compile表示被依赖包需要参与当前项目的编译,包括后续的测试,运行周期也参与其中,是一个比较强的依赖;打包的时候通常需要包含进去。 - provided
provided
类型的scope只会在项目的编译
、测试
阶段起作用;可以认为在目标容器中已经提供了这个依赖,无需在提供,但是在编写代码或者编译时可能会用到这个依赖;依赖不会被打入到项目jar包中
。
说到
provided
,这里就要说到<dependency>
下的子标签<optional>
,如果一个依赖的<optional>
设置为true
,则该依赖在打包的时候不会被打进jar包,同时不会通过依赖传递
传递到依赖该项目的工程;例如:x依赖B,B由依赖于A(x->B->A),则A中设置<optional>
为true
的依赖不会被传递到x中。这两者的区别在于:
1、<optional>
为true
表示某个依赖可选,该依赖是否使用都不会影响服务运行;
2、provided
的<scope>
在目标容器中已经提供了这个依赖,无需在提供
- runtime
runtime
与compile
比较相似,区别在于runtime
跳过了编译
阶段,打包的时候通常需要包含进去。 - test
在一般的编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用,不会被打包到项目jar包中
,同时如果项目A依赖于项目B,项目B中的test
作用域下的依赖不会被继承。 - system
表示使用本地系统路径下的jar包,需要和一个systemPath一起使用,如下:
1 <!--引用--> 2 <dependency> 3 <groupId>xxxx</groupId> 4 <artifactId>xxx</artifactId> 5 <systemPath>${basedir}/lib/xxxxx.jar</systemPath> 6 <scope>system</scope> 7 <version>1.4.12</version> 8 </dependency>
- import
import
只能在pom文件的<dependencyManagement>
中使用,从而引入其他的pom文件中引入依赖,如:在Spring boot 项目的POM文件中,我们可以通过在POM文件中继承 Spring-boot-starter-parent来引用Srping boot默认依赖的jar包,如下:
但是,通过上面的parent继承的方法,只能继承一个 spring-boot-start-parent。实际开发中,用户很可能需要继承自己公司的标准parent配置,这个时候可以使用 scope=import 来实现多继承。代码如下:<!-- Inherit defaults from Spring Boot --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.BUILD-SNAPSHOT</version> </parent>
1 <dependencyManagement> 2 <dependencies> 3 <dependency> 4 <!-- Import dependency management from Spring Boot --> 5 <groupId>org.springframework.boot</groupId> 6 <artifactId>spring-boot-dependencies</artifactId> 7 <version>2.0.1.BUILD-SNAPSHOT</version> 8 <type>pom</type> 9 <scope>import</scope> 10 </dependency> 11 </dependencies> 12 </dependencyManagement>
通过上面方式,就可以获取spring-boot-dependencies.2.0.1.BUILD-SNAPSHOT.pom文件中dependencyManagement配置的jar包依赖。如果要继承多个,可以在dependencyManagement中添加,如:
1 <dependencyManagement> 2 <dependencies> 3 <!-- Override Spring Data release train provided by Spring Boot --> 4 <dependency> 5 <groupId>org.springframework.data</groupId> 6 <artifactId>spring-data-releasetrain</artifactId> 7 <version>Fowler-SR2</version> 8 <type>pom</type> 9 <scope>import</scope> 10 </dependency> 11 <dependency> 12 <groupId>org.springframework.boot</groupId> 13 <artifactId>spring-boot-dependencies</artifactId> 14 <version>2.0.1.BUILD-SNAPSHOT</version> 15 <type>pom</type> 16 <scope>import</scope> 17 </dependency> 18 </dependencies> 19 </dependencyManagement>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理