无法在 Microsoft Powershell 中使用 `mvn -D` 参数运行 Maven,但可以在命令提示符下运行

问题描述 投票:0回答:4

我正在尝试从命令行构建我们的网络项目,但跳过测试。我正在使用命令

mvn clean install -Dmaven.test.skip=true

当我从传统的黑白命令提示符(又名 DOS shell)运行命令时,该命令有效,但是当我从“Windows PowerShell”命令运行它时,出现以下错误:

[错误]未知的生命周期阶段“.test.skip=true”。您必须以 : 或 :[:]: 格式指定有效的生命周期阶段或目标。可用的生命周期阶段有:验证、初始化、生成源、流程源、生成资源、流程资源、 编译,处理类,生成测试源,处理测试源,生成测试资源,处理测试资源,测试编译,处理测试类,测试,准备 电子包、打包、集成测试前、集成测试、集成测试后、验证、安装、部署、站点前、站点、站点后、站点部署、清理前、清理、后干净的。 -> [帮助1]`

造成这种差异的原因是什么?如何让 PowerShell 表现得像传统命令提示符一样?

它在 Windows 7 上运行。

windows command-line powershell maven command
4个回答
153
投票

当您遇到 PowerShell 对传递给控制台 EXE 的参数的解释问题时,请尝试使用

PowerShell 社区扩展
附带的 echoargs.exe 实用程序。使用此工具,您可以查看 PowerShell 如何向 EXE 提供参数,例如:

PS> echoargs mvn clean install -Dmaven.test.skip=true
Arg 0 is <mvn>
Arg 1 is <clean>
Arg 2 is <install>
Arg 3 is <-Dmaven>
Arg 4 is <.test.skip=true>

PS> echoargs mvn clean install '-Dmaven.test.skip=true'
Arg 0 is <mvn>
Arg 1 is <clean>
Arg 2 is <install>
Arg 3 is <-Dmaven.test.skip=true>

简短回答 - 使用引用

'-Dmaven.test.skip=true'


12
投票

根据此电子邮件主题

通常,如果您使用 Powershell 进行 Maven、svn 等,您最终会 必须转义任何以破折号 (-) 开头的参数。这 Powershell 中的转义字符是反引号。所以你最终得到了 mvn 原型:创建 `-DgroupId=blah `-DartifactId=blah。 ,“-”是一个 运行时需要用反引号转义的特殊字符 来自 Powershell 控制台的 Maven。


8
投票

以下内容对我有用。

$mvnArgs1 ="mvn test -X -Dmaven.test.skip=true".replace('-D','`-D')
Invoke-Expression $mvnArgs1

看起来-D是一种特殊字符,需要转义。
另请注意,-X 工作正常并且不需要转义。 注意替换命令中使用单引号,如果使用双引号(即“),则需要使用``.

我在 Windows 7 上使用 Powershell 2.0 (2.0.1.1)


3
投票

在 PowerShell 中,连字符 (-) 不会被视为 Linux 终端,因此您需要在每个连字符之前使用这个 (`) 对其进行转义。

例如:-

以下命令在 PowerShell 中不起作用

mvn clean install -Dmaven.test.skip=true 

您需要在连字符 (-) 之前添加此 (`),如下所示

mvn clean install `-Dmaven.test.skip=true 
© www.soinside.com 2019 - 2024. All rights reserved.