1、问题背景:
在一个聚合工程中给各pom.xml文件修改项目版本号(version),为了快捷方便,且不遗漏多个子项目,采用方法如下
(1)在项目的主pom.xml文件中version版本改成需要的
(2)在idea终端执行maven命令(如下)
mvn -N versions:update-child-modules
(3)执行成功之后(BUID SUCCESS),查看任一子模块 pom文件看看是否改了,即可确认
2、问题出现
执行meaven命令的时候,就会报错ERROR...
Failed to execute goal requires a project to execute but there is no POM in this directory(一个实际的当前所在的目录路径,如...../xx/target)
3、含义和原因:
(1)含义:在当前target目录中找不到pom文件
(2)原因:idea终端所处的目录是target,而这个目录下没有pom文件
4、解决:
知道原因之后,我们就可以知道,我们要想执行上面的命令,就要到正确的目录下才可以,也就是需要到父工程的目录下,因为只有在父工程目录里才包含所有子项目的内容,其中包含子项目各自的pom文件,而不是在父工程或其他工程的target目录下,具体解决步骤如下面示例。
假设父工程叫a,现在所处的目录是projects/a/target,这个时候就要回到a目录下,idea终端输入如下命令解决:
- pwd //查看当前所在目录,一般报错的地方会提示当前在哪个目录下
- cd projects/a //回到a目录
- mvn -N versions:update-child-modules //这时再执行maven命令
5、总结
这类maven命令错误的主要原因就是目前所处的目录不对,Goal找不到,只需切到对应正确的目录下再执行就好啦~
补充: 针对聚合项目版本更新同步问题补充
若pom文件版本改完之后,子项目version处报错表示no find,这主要是项目更改的东西暂时没加载好
解决:
1、等待,项目自主加载完成就好了
2、手动加载一下,步骤如下:
- 先确认和主pom文件version是否已改为一致,一致了再进行下面操作
- 点开maven,先clean一下,再compile一下,最后package一下
- build success就好了