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.
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'
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.
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