Невозможно запустить Maven, используя аргумент `mvn -D` в Microsoft Powershell, но работает в командной строке - PullRequest
42 голосов
/ 14 июня 2011

Я пытаюсь построить наш веб-проект из командной строки, но пропускаю тестирование. Я использую команду mvn clean install -Dmaven.test.skip=true.

Когда я запускаю команду из традиционной черно-белой командной строки (она же оболочка DOS), команда работает, но когда я запускаю ее из команды из Windows PowerShell, я получаю следующую ошибку:

[ERROR] Unknown lifecycle phase ".test.skip=true". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin- artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepar e-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-site, site, post-site, site-deploy, pre-clean, clean, po st-clean. -> [Help 1]

Что является причиной этого несоответствия и как заставить PowerShell вести себя как традиционная командная строка?

Это работает в Windows 7.

Ответы [ 3 ]

99 голосов
/ 15 июня 2011

Когда вы сталкиваетесь с проблемами интерпретации аргументов PowerShell для передачи в консольный EXE-файл, попробуйте использовать утилиту echoargs.exe, которая поставляется с PowerShell Community Extensions . С помощью этого инструмента вы можете увидеть, как PowerShell передает аргументы в EXE, например ::100100

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'

9 голосов
/ 16 февраля 2015

Согласно этой теме электронной почты :

Как правило, если вы используете Powershell для Maven, SVN и т. Д., Вы в конечном итоге необходимость избегать любых аргументов, которые начинаются с тире (-). Экранирующий персонаж в Powershell - это отступление. Таким образом, вы в конечном итоге с mvn archetype: create `-DgroupId = blah` -DartifactId = blah. «-» является специальный символ, который нужно убрать с галочкой при запуске maven с консоли Powershell.

5 голосов
/ 14 ноября 2012

У меня работает следующее.

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

Похоже, что -D является специальным символом и требует экранирования.
Также обратите внимание, что –X работает нормально и не требует экранирования. Обратите внимание на использование одинарных кавычек в команде замены, если вы используете двойные кавычки (т.е. "), вам необходимо использовать` `.

Я использую Powershell 2.0 (2.0.1.1) для Windows 7

...