解决"The goal you specified requires a project to execute but there is no POM in this directory"问题

情景再现

今天是2021年5月7日。用的是最新的Maven 3.8.1。

image-20210507143512110

跟随官方教程输入如下命令:

1
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

却得到了这样的结果:

image-20210507143753157

生成失败,提示缺少POM文件。

看这报错信息就奇怪了,官方的例子就是这么写的啊:根据原型生成项目、非交互模式、给出了所有需要的参数,看起来没什么问题。

虽然找个pom.xml不难,但Maven你一个构建工具,肯定应该能自己生成的啊。

解决方案

1、使用交互式方案构建

image-20210507144819477

可行,但很不舒服,为啥非交互式不行?

2、偶然发现在mac上能够构建成功。

难道是Windows和Maven命令行有冲突?搜索相关资料,无果。

思考:既然官方示例这么写,应该有不少人实际用过,为什么没人有这个问题?系统既然没问题,那我的目光就转到了终端上,莫非。。。

3、使用CMD执行

image-20210507145119854

CMD执行没什么问题。这就解释了为什么资料少:因为大多数人还是用CMD而不是PowerShell。问题定位到PowerShell上。

4、PowerShell问题

查找相关资料,发现正确解法:

1
2
3
4
5
6
mvn archetype:generate `
'-DgroupId=com.mycompany.app' `
'-DartifactId=my-app' `
'-DarchetypeArtifactId=maven-archetype-quickstart' `
'-DarchetypeVersion=1.4' `
'-DinteractiveMode=false'

image-20210507145818664

成功。

在PowerShell里使用-D参数要用单引号'括起来,具体原因不知,应该是和PowerShell语法有关。

解决方案

1、使用-D参数要用单引号'括起来

2、使用CMD。不想开新窗口的话,就直接在PowerShell里执行CMD再退出。

image-20210507150207633