Nie można uruchomić programu Maven przy użyciu argumentu ' mvn-d` w programie Microsoft Powershell, ale działa w wierszu polecenia

Próbuję zbudować nasz projekt internetowy z linii poleceń, ale pomijam testowanie. Używam polecenia mvn clean install -Dmaven.test.skip=true.

Gdy uruchamiam polecenie z tradycyjnego black & white Command Prompt (aka DOS shell) polecenie działa, ale gdy uruchamiam je z polecenia z "Windows PowerShell" dostaję następujący błąd:

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

Co powoduje tę rozbieżność i jak sprawić, by PowerShell zachowywał się jak tradycyjny Wiersz polecenia?

This is running on Windows 7.

Author: ArtB, 2011-06-14

3 answers

Jeśli napotkasz problemy z interpretacją argumentów PowerShell, które mają być przekazywane do EXE konsoli, spróbuj użyć narzędzia echoargs.exe, które pochodzi z rozszerzenia PowerShell Community. Za pomocą tego narzędzia możesz zobaczyć, jak PowerShell dostarcza argumenty do EXE, np.:

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>

Krótka odpowiedź - użyj cytowania '-Dmaven.test.skip=true'

 81
Author: Keith Hill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-09 18:55:22

Zgodnie z Ten wątek email :

Ogólnie jeśli używasz Powershell dla Mavena, svn itp kończy się unikanie argumentów zaczynających się od myślnika (-). Na postać ucieczki w Powershell to backtick. Więc kończysz z mvn archetype: create ' - DgroupId=blah '`DartifactId=blah. , "- "jest specjalna postać, która wymaga ucieczki z tyłem podczas biegu maven z konsoli Powershell.

 5
Author: katrash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-25 22:38:17

Poniżej działa dla mnie.

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

Wygląda na to, że-D jest rodzajem specjalnej postaci i wymaga ucieczki.
Zauważ również, że –X działa dobrze i nie wymaga ucieczki. Zwróć uwagę na użycie pojedynczego cudzysłowu w poleceniu replace, jeśli używasz podwójnych cudzysłowów (np.

Używam Powershell 2.0 (2.0.1.1) w windows 7

 4
Author: Haim Raman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-14 08:08:11