Maven依赖管理

Maven依赖特性:

1、依赖配置

依赖指当前项目运行所需的jar,一个项目可以设置多个依赖



    4.0.0

    org.example
    maven-base-study-02
    1.0-SNAPSHOT

    
        8
        8
    

    
    
        
        
            
            org.springframework.boot
            
            spring-boot-starter-web
            
            3.1.2
        
    

2、依赖传递

直接依赖:在当前项目中通过依赖配置建立的依赖关系。

间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源。

Maven依赖管理_第1张图片

Maven依赖管理_第2张图片

依赖传递冲突原则:

路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高。

声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的。

特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的。

3、可选依赖

可选依赖指对外隐藏当前所依赖的资源一一不透明.



    4.0.0

    org.example
    maven-base-study-02
    1.0-SNAPSHOT

    
        8
        8
    

    
    
        
        
            
            org.springframework.boot
            
            spring-boot-starter-web
            
            3.1.2
            
            false
        

    

 optional==true

Maven依赖管理_第3张图片

optional==false

Maven依赖管理_第4张图片

4、排除依赖

排除依赖指主动断开依赖的资源,被排除的资源无需指定版本一一不需要



    4.0.0

    org.example
    maven-base-study-01
    1.0-SNAPSHOT

    
        8
        8
    
    
        
            org.example
            maven-base-study-02
            1.0-SNAPSHOT
            
            
                
                    org.springframework.boot
                    spring-boot-starter-web
                
            
        
    

排除依赖以后: Maven依赖管理_第5张图片

5、依赖范围

依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围.

compile(默认)
如果没有指定scope,那么该元素的默认值为compile。被依赖项目需要参与到项目的编译、测试、打包、运行等阶段,打包时通常会包含被依赖项目,是比较强的依赖。

provided
被依赖项目理论上可以参与到项目的编译、测试、运行等阶段,当时在打包时进行了exclude动作。
应用场景:例如我们在开发一个web项目,在编译的时候我们需要依赖servlet-api.jar,但在运行时我们不需要这个jar,因为它已由应用服务器提供,这是我们就需要用provided来修饰这个依赖包。

runtime
顾名思义,表示该依赖项目无需参与到项目的编译,但会参与到测试与运行阶段。
应用场景:例如在编译时我们不需要JDBC API的jar,但在运行时才需要JDBC的驱动包。 

test
表示该依赖项目仅会参与到项目的测试阶段。
应用场景:例如,Junit 测试。

system
与provided类似,但是被依赖项不会从maven仓库查找依赖,而是从本地系统中获取,systemPath元素用于指定依赖在系统中jar的路径。

import
只使用在dependencyManagement中,我们知道maven和java只能单继承,作用是管理依赖包的版本,一般用来保持当前项目的所有依赖版本统一。
例如:项目中有很多的子项目,并且都需要保持依赖版本的统一,以前的做法是创建一个父类来管理依赖的版本,所有的子类继承自父类,这样就会导致父项目的pom.xml非常大,而且子项目不能再继承其他项目。
import为我们解决了这个问题,可以把dependencyManagement放到一个专门用来管理依赖版本的pom中,然后在需要用到该依赖配置的pom中使用scope import就可以引用配置。例如:


	
		
		
			org.springframework.boot
			spring-boot-dependencies
			2.3.12.RELEASE
			pom
			import
		

		
		
			org.springframework.cloud
			spring-cloud-dependencies
			Hoxton.SR12
			pom
			import
		

		
			com.alibaba.cloud
			spring-cloud-alibaba-dependencies
			2.2.10-RC1
			pom
			import
		
	

你可能感兴趣的:(#,Maven,maven,依赖管理)