SpringBoot Pom文件没有父依赖问题(scope = import)

问题引入:

都说SpringBoot创建时会默认继承一个 spring-boot-starter-parent依赖,但是我就没有… 难道因为我是生在新时代的人吗? 可能是吧。。。那么SpringBoot是如何可以不写依赖版本的呢?

默认Pom文件如下:



    4.0.0
    com.example
    test-pom
    0.0.1-SNAPSHOT
    test-pom
    Demo project for Spring Boot

    
        1.8
        UTF-8
        UTF-8
        2.3.7.RELEASE
    

    
        
            org.springframework.boot
            spring-boot-starter
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-dependencies
                ${spring-boot.version}
                pom
                import
            
        
    

    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.1
                
                    1.8
                    1.8
                    UTF-8
                
            
            
                org.springframework.boot
                spring-boot-maven-plugin
                2.3.7.RELEASE
                
                    com.example.testpom.TestPomApplication
                
                
                    
                        repackage
                        
                            repackage
                        
                    
                
            
        
    


压根没有 parent 标签好不好嘛

问题解决:

我一开始的想法是难道pom文件时默认继承那个父依赖的?答案是:漏,大漏特漏。
然后又开始怀疑难道是这个 < dependencyManagement > 作祟嘛,按道理来说不是呀,依赖管理标签不是用来声明什么依赖的吗,实际不导入,而是作为父类时什么依赖可以省略版本号。

dependencyManagement 组件

作用:用来申明依赖,但不导入。dependencies 组件用于导入依赖,注意两者区别特性:

  1. 子项目不会继承 dependencyManagement 组件中声明的依赖。
  2. 但如果子项目想导入某个父pom 中 dependencyManagement 中的依赖,只需要填写 groupId 和 artifactId ,不需要填写版本号,maven会自动去父pom 的 dependencyManagement 中找对应的 version,包括scope、exclusions等

        
            
                org.springframework.boot
                spring-boot-dependencies
                ${spring-boot.version}
                pom
                import
            
        

搜着搜着发现 pom 中 < scpoe > import < /scope > 的作用

但tm就是理解不了,草

有import


        
            
                org.springframework.boot
                spring-boot-dependencies
                ${spring-boot.version}
                pom
                import
            
        

所有不声明版本的依赖均可导入。

无import

在这里插入图片描述
报错版本不能为空

关于import作用:

导入依赖范围,该依赖范围只能与 dependencyManagement 元素配合使用,其功能是将目标 pom.xml 文件中 dependencyManagement 的配置导入合并到当前 pom.xml 的 dependencyManagement 中。

总结:

import 说明继承了dependencyManagement中所有的依赖,从而导致当前pom能够导入不写版本的依赖,而不写import就是正常功能了,在当前pom文件中或者子类pom中,能够不提供版本的导入该依赖,和 dependencyManagement就没有任何关系。

本文参考链接:
Maven依赖传递,排除依赖和可选依赖
Maven依赖中scope的含义
官方文档scope含义

你可能感兴趣的:(idea,java,maven)