Maven complaining about parent relative path
刚来新公司,工作的时候leader 让导入了一个maven 聚合的项目。
需求是从maven聚合项目,中独立一个服务出来。
类似上图独立 eurekaserver 项目成一个独立的项目,方便部署。
报错信息:
[FATAL] Non-resolvable parent POM for com.alibaba:********:[unknown-version]: Could not find artifact com.***-parent:pom:-SNAPSHOT and ‘parent.relativePath’ points at no local POM @ line 12, column 10
原因
当设置了时,是需要有一个relative path来查找父项目的pom.xml的,而如果没有,那么默认的父项目pom.xml就在该pom.xml的父附录中。如果没有,就会根据groupId和artifactId在本地和远端maven仓库中找。如果pom.xml对应的不是外层项目,所以这里就会报错。
解决办法
添加空标签就会直接去仓库找了
<relativePath></relativePath>
原理
maven的parent 标签的解析顺序
- relativePath
- local repository
- remote repositories
首先会检查相对路径 相对路径(如果未明确给出)默认为…,即当前项目的父目录中的pom
Maven会检查
a)该目录中是否有pom文件,
b)该pom文件是否包含与当前项目的父级定义中所述的坐标相同的坐标。
如果a)和b)为true,
则将该pom文件用作解析有效pom的父文件。
如果a)是true,而b)是false,
则会给出警告,因为这通常指向错误配置的项目(如您的情况),并且pom被忽略。
如果a)为假
则检查其他来源。
思考
其实遇到问题可以参考一下框架或者是同类型的问题是怎么解决的。
比如说 spring boot 其实也有同样的问题 我们看一下它的配置文件。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
这里明确的说明了 会通过仓库去找相关的jar包。
<!-- lookup parent from repository -->