理解Maven scope依赖范围的作用
一、理解Maven scope依赖范围的作用
Maven在编译项目主代码的时候需要使用一套classspath。总共有三种classpath,分别对应于Maven编译项目主代码的时候、Maven编译和执行测试的时候、实际运行Maven项目的时候。
Compile: 编泽依赖范围.如果没有指定,就会默认使用该依赖范围。比如spring-core依赖,在编译、测试、运行的时候都需要使用该依赖。
test: 比如JUnit的依赖,只有在测试代码的时候使用;
provided:以提供依赖范围。使用此依赖范围的Maven依赖,对于编译和测试的classpath有效,但在运行时无效。比如servlet-api,编译和测试项目的时候需要用到该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复的引入一遍。
runtime:运行时依赖范围。使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但在编译主代码时无效。比如JDBC驱动的实现,项目主代码编译的时候,只需要JDK提供的JDBC接口就可以,但是在执行测试或者运行项目的时候才需要实现实现JDBC接口的具体JDBC驱动。
import:scope=import,type=pom表示在此pom中引入spring-boot-dependencies的pom的所有内容,注意只能在dependencyManagement中使用。
system:系统依赖范围。该依赖与三种classpath的关系,和provided依赖范围完全一致。只是,使用system范围依赖时,需要指定systemPath元素显示地指定依赖文件的路径。由于此依赖不是Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可遗址,因此不建议使用。systemPath元素可以引用环境变量,如:
<dependency> <groupId>javax.sql</groupId> <artifactId>jdbc-stdext</artifactId> <version>2.0</version> <scope>system</scope> <systemPath>${java.home}/lib/rt.jar</systemPath> </dependency>
二、依赖范围与classpath的关系
例如:引入一个jar包scope=compile, 就是说程序在测试、打包、部署都需要这个jar。
相关文章
- Maven的build生命周期和常用plugin
- IDEA导出Maven工程依赖的所有jar包
- 解决Maven依赖全部失败
- Maven构建时报错,File encoding has not been set, using platform encoding GBK解决方法
- maven依赖jdk的tools.jar包坐标怎么依赖
- maven同时下载源代码包命令
- MAVEN 打 JAR包 注意地方(怎么把依赖打到Jar)
- log4j 2.x的坑,maven同时依赖log4j的2个版本jar包,将导致No appenders could be found警告
- maven项目中添加MySql依赖
- Maven - 项目结构
- maven可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)
- Maven命令行使用:mvn clean compile(编译)
- maven仓库管理
- Maven update project...后jdk变成1.5,update project后jdk版本改变
- IDEA maven 无法加载已经安装的模块依赖包
- maven与gradle的对比
- maven手动下载依赖
- 【转】idea 用maven骨架生成项目速度慢的问题
- maven依赖包冲突解决思路
- maven中archetype(原型)的使用
- 【MAVEN】配置私服Nexus
- 真正解决问题:maven eclipse tomcat java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener--转
- Spring项目中简单几步实现多个动态数据源(多个数据库)切换,通过maven依赖注入相关jar包,来满足不同数据库、不同数据表(不同数据源)的灵活调用