windows - not - No se puede ejecutar Maven utilizando el argumento `mvn-D` en Microsoft Powershell, pero funciona en el sÃmbolo del sistema
mvn command not found (3)
Estoy intentando construir nuestro proyecto web desde la línea de comandos, pero omitiendo las pruebas. Estoy usando el comando mvn clean install -Dmaven.test.skip=true
.
Cuando ejecuto el comando desde el símbolo del sistema en blanco y negro tradicional (también conocido como shell de DOS), el comando funciona, pero cuando lo ejecuto desde el comando de "Windows PowerShell" aparece el siguiente error:
[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]
¿Qué está causando esta discrepancia y cómo hago para que PowerShell se comporte como el símbolo del sistema tradicional?
Esto se ejecuta en Windows 7.
Cuando tenga problemas con la interpretación de los argumentos de PowerShell para echoargs.exe
a un EXE de consola, intente utilizar la utilidad echoargs.exe
que viene con las extensiones de comunidad de PowerShell . Con esta herramienta, puede ver cómo PowerShell suministra los argumentos al EXE, por ejemplo:
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>
Respuesta corta - utilice la cita ''-Dmaven.test.skip=true''
De acuerdo con este hilo de correo electrónico :
En general, si está utilizando Powershell para Maven, svn, etc., tendrá que escapar de cualquier argumento que comience con un guión (-). El personaje de escape en Powershell es un revoltoso. Así que terminas con mvn archetype: crea `-DgroupId = blah` -DadifactId = blah. , ''-'' es un personaje especial que necesita escaparse con un back-tick cuando ejecutas maven desde la consola Powershell.
El siguiente funciona para mi.
$mvnArgs1 ="mvn test -X -Dmaven.test.skip=true".replace(''-D'',''`-D'')
Invoke-Expression $mvnArgs1
Parece que -D es una especie de personaje especial y requiere escapar.
Tenga en cuenta también que -X funciona bien y no requiere escaparse. Tenga en cuenta el uso de comillas simples en el comando de reemplazo, si utiliza comillas dobles (es decir, ") debe usar` `.
Estoy usando Powershell 2.0 (2.0.1.1) en Windows 7