Ne peut pas exécuter Maven en utilisant l'argument` mvn-D ' dans Microsoft Powershell, mais fonctionne dans L'invite de commande

j'essaie de construire notre projet web à partir de la ligne de commande mais en sautant les tests. Je suis l'aide de la commande mvn clean install -Dmaven.test.skip=true.

quand j'exécute la commande à partir de L'invite de commande traditionnelle en noir et blanc (alias dos shell) la commande fonctionne, mais quand je l'exécute à partir de la commande de "Windows PowerShell" j'obtiens l'erreur suivante:

[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]

Quelle est la cause de cette divergence et comment faire pour que PowerShell se comporte comme la commande traditionnelle Invite?

cela fonctionne sous Windows 7.

33
demandé sur ArtB 2011-06-14 22:07:17

3 réponses

lorsque vous rencontrez des problèmes avec L'interprétation de PowerShell des arguments à passer à une console EXE, essayez d'utiliser le echoargs.exe utilitaire qui vient avec l' PowerShell Communauté Extensions. Avec cet outil, vous pouvez voir comment PowerShell fournit les arguments à L'EXE par exemple:

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>

courte réponse - utilisez la citation '-Dmaven.test.skip=true'

81
répondu Keith Hill 2013-10-09 18:55:22

Selon ce fil d'email:

en général, si vous utilisez Powershell pour Maven, svn etc vous finissez devoir échapper à tout argument qui commence par un tiret (-). Le le personnage de l'évasion de Powershell est un backtick. Donc tu finis avec mvn archetype:create `-DgroupId=bla `-DartifactId=bla. le '-' est un personnage spécial qui a besoin de s'échapper avec un tic quand vous courez maven de la console Powershell.

5
répondu katrash 2016-02-25 22:38:17

La suivante fonctionne pour moi.

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

on dirait que le-D est une sorte de caractère spécial et nécessite de s'échapper.

Notez aussi que-X fonctionne très bien et ne nécessite pas d'échappatoire. Notez l'utilisation d'un seul guillemet dans la commande Remplacer, si vous utilisez des guillemets doubles (i.e. ") vous devez utiliser `.

J'utilise Powershell 2.0 (2.0.1.1) sur windows 7

4
répondu Haim Raman 2012-11-14 08:08:11