2011-06-14 15 views
29

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.No se puede ejecutar Maven usando el argumento `mvn -D` dentro de Microsoft Powershell, pero funciona en el símbolo del sistema

Cuando ejecuto el comando de la tradicional negro & Prompt blanco Comando (también conocido como shell de DOS) el comando funciona, pero cuando lo ejecuto desde el comando de "Windows PowerShell" me sale 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é causa esta discrepancia y cómo consigo que PowerShell se comporte como el símbolo del sistema tradicional?

Esto se ejecuta en Windows 7.

Respuesta

76

Cuando a tener problemas con la interpretación de PowerShell de argumentos para ser pasado a una consola de EXE, trate de usar la utilidad echoargs.exe que viene con el PowerShell Community Extensions. Con esta herramienta se puede ver cómo PowerShell suministra los argumentos para el EXE ej .:

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 - uso citando '-Dmaven.test.skip=true'

+2

Wow, estrellas fantástico respuesta, me gustaría poder votar hasta dos veces – ArtB

+2

acabo de encontrar con esta ¿Qué razón hay para los parámetros que parte en '=' y parece completamente estúpida.. ''? para mí. – Grod

+0

Buena respuesta. Alguna idea de por qué powershell se divide -Dmaven.test.skip = verdadero en el primer período pero no en el posterior unos? – Fopedush

4

las siguientes obras para mí.

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

Parece que -D es una especie de personaje especial y necesita escapar.
Tenga en cuenta también que -X funciona bien y no requiere escaparse. Observe el uso de comilla simple en el comando reemplazar, si utiliza comillas dobles (es decir ") es necesario utilizar` `.

estoy usando PowerShell 2.0 (2.0.1.1) en Windows 7

3

acuerdo a this email thread:

Generally if you are using Powershell for Maven, svn etc you end up having to escape any arguments which start with a dash (-). The escape character in Powershell is a backtick. So you end up with mvn archetype:create `-DgroupId=blah `-DartifactId=blah. , the '-' is a special character that needs escaping with a back-tick when you run maven from Powershell console.

Cuestiones relacionadas