[已解决]maven子项目dependency提示缺少依赖版本号

今天遇到一个很扯淡的问题,记录一下。
之所以说扯淡,是因为这是粗心大意导致的,之所以要记录,是因为我发现这种问题大部分人都会遇到,但由于对maven打包方式及pom文件的理解缺失,导致大部分人会绕过这个问题。

问题描述:
新建了父子级的maven项目,父项目由idea的ali spring initialer自动创建,我新建了子maven moudule,在子moudule中添加依赖时,如果不指定具体version,则报错,提示'dependencies.dependency.version' for xxx:jar is missing。

思路:
这个问题表面上看很好解决,直接加version就完了呗。
但我看了一下另一个项目,不加版本号是没问题的,而且我记得我以前写项目,不指定version也是没问题的,所以还是配置有问题。
key point在父项目和子项目的pom配置上。

发现原因:
父项目的pom中指定了dependencyManagement标签
这个标签很重要,这里涉及一个概念,此标签的用处及与dependency的区别。
dependencymanagement的作用在于声明依赖,但其并不引用。只是表示了一个抽象,你可以做哪些事,但你还没有做。
dependency表示引入了某个依赖,一个或duogejar,可以在其中忽略具体的版本,因为他会从dependencymanagement中获取他应该有的版本。
那么,此时,重点来了:
dependencymanagement不是加上就可以,他也分很多种类。比如在我的项目中,涉及到了spring boot、ali cloud、spring cloud,那么就需要这样写:


    1.8
    UTF-8
    UTF-8
    2.3.0.RELEASE
    2.2.2.RELEASE
    Hoxton.SR6


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

我的问题在于,我想引入的gateway是springcloud的功能,但我在父项目的dependencyManagement中没有声明springcloud及其版本,所以在子项目中,如果对依赖不加入version的话,就会提示version is missing。

解决办法:
父项目中加入对应依赖的management引入声明。

需解决的问题:
dependencyManagement中各个参数的了解。比如type,scope等等。

你可能感兴趣的:(maven)