我正在尝试从命令行构建我们的网络项目,但跳过测试。我正在使用命令
mvn clean install -Dmaven.test.skip=true
。
当我从传统的黑白命令提示符(又名 DOS shell)运行命令时,该命令有效,但是当我从“Windows PowerShell”命令运行它时,出现以下错误:
[错误]未知的生命周期阶段“.test.skip=true”。您必须以 : 或 :[:]: 格式指定有效的生命周期阶段或目标。可用的生命周期阶段有:验证、初始化、生成源、流程源、生成资源、流程资源、 编译,处理类,生成测试源,处理测试源,生成测试资源,处理测试资源,测试编译,处理测试类,测试,准备 电子包、打包、集成测试前、集成测试、集成测试后、验证、安装、部署、站点前、站点、站点后、站点部署、清理前、清理、后干净的。 -> [帮助1]`
造成这种差异的原因是什么?如何让 PowerShell 表现得像传统命令提示符一样?
它在 Windows 7 上运行。
当您遇到 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'
根据此电子邮件主题:
通常,如果您使用 Powershell 进行 Maven、svn 等,您最终会 必须转义任何以破折号 (-) 开头的参数。这 Powershell 中的转义字符是反引号。所以你最终得到了 mvn 原型:创建 `-DgroupId=blah `-DartifactId=blah。 ,“-”是一个 运行时需要用反引号转义的特殊字符 来自 Powershell 控制台的 Maven。
以下内容对我有用。
$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)
在 PowerShell 中,连字符 (-) 不会被视为 Linux 终端,因此您需要在每个连字符之前使用这个 (`) 对其进行转义。
例如:-
以下命令在 PowerShell 中不起作用
mvn clean install -Dmaven.test.skip=true
您需要在连字符 (-) 之前添加此 (`),如下所示
mvn clean install `-Dmaven.test.skip=true