用pom文件从nexus3拉依赖,无法拉取的一个问题
问题:
我先到nexus3手动上传了一个jar包(从https://mvnrepository.com/ 下载的),再到父pom文件里面拉依赖,拉了很久,对nexus各种检查,硬是没有发现问题,之前其他的上传的jar都可以正常拉下来,为什么后来上传的jar包就不能拉呢?甚至直接用nexus的ur下载链接都能正常下载jar包,就是不能用pom文件拉。然后就是各种AI、各种搜索,各种尝试。。。都不行。。。
最后,依赖一直爆红,一直没法拉。。。
然后我把pom依赖放到子pom文件看看效果的时候,右键:maven->重新加载项目,就拉下来了。
结果是从本地nexus3上拉的,不是从我手动上传的jar包中去拉的,是从阿里云源文件中去拉的。。。(当时tun模式还打开了,但是应该与此无关)
花了我两天,共10个小时呀。。。
原因如下:
1、父 POM 和子 POM 的依赖管理作用不同
父 POM 里写的依赖(dependency)如果不被子模块继承或者引用,单独构建父 POM 是不会去下载依赖的。
通常父 POM 主要是用来定义 dependencyManagement,统一管理版本,不直接拉依赖,除非父 POM 本身有自己的打包任务。
在父 POM 直接写 <dependency>,但如果父 POM 是打包类型 pom 并且单独构建父 POM,Maven 可能不会拉取依赖,只会管理版本。2. 构建时的作用域差异
子模块是具体的可编译项目,构建时会拉取所有声明的依赖。
父 POM 可能只是聚合(packaging: pom),不实际用到依赖,不触发下载。3. 构建方式不同导致的差异
在父 POM 目录执行构建,默认是构建父模块本身,没有触发子模块构建,也不会拉依赖。
在子模块目录构建,Maven 会拉取该模块的依赖,自然成功。