2009-10-05 16 views
10

He estado utilizando Powershell-1.0 para las necesidades de línea de comandos por un tiempo, en lugar de cmd.exe. Desafortunadamente, todavía hay algunas advertencias cuando se usa Java. Necesito pasar una propiedad a un frasco, así:Cómo pasar Propiedades a jar de Powershell?

java -jar -Duser.language=en any.jar 

Esta línea funciona bien en cmd.exe, pero no en Powershell, ya que busca otro frasco: No se puede acceder jarfile user.language = es

Usar comillas no ayuda.

¿Es posible en Powershell-1.0, o extraño algo en Java?

Gracias de antemano,

Saludos,

jgran

+0

es bueno que lo pruebes en cmd.exe, solo estaba 'solucionando' mis problemas en otro lugar cuando debajo del comando se me ocurrió que la ruta de clase no está disponible. ¿Quién pensaría que el powershell fue la causa? 'java -Djasypt.encryptor.password = pass -jar my.jar' –

Respuesta

2

Intente iniciar su lugar utilizando el siguiente patrón:

java -Duser.language=en -jar any.jar 

Eso supone que user.language se entiende como una propiedad del sistema . Si nos referimos como un argumento de línea de comandos, cambiar eso a:

java -jar any.jar -Duser.language=en 

De hecho, estoy sorprendido de que la línea de comando que se menciona obras en todo el exterior de PowerShell (aunque he confirmado que funciona bien para mí también, incluso en Linux) y también es un poco extraño que las cosas funcionen de manera diferente dentro y fuera de powershell.

De java -help:

Usage: java [-options] class [args...]     
      (to execute a class)       
    or java [-options] -jar jarfile [args...]   
      (to execute a jar file)      
where options include: 
... 
    -D<name>=<value> 
        set a system property 
... 

Así que básicamente siempre se debe poner el nombre del archivo JAR directamente después de la opción de línea de comandos -jar, y las opciones de JVM (tales como la definición de las propiedades del sistema con -D) antes.

+0

PowerShell hace algo raro con las opciones -D pasadas a Java, por lo que esto no funcionará. Ver la respuesta de Keith Hill. –

+0

@Johannes Powershell destruye la línea de comandos, sigue siendo mi respuesta, que el nombre JAR debe * siempre * estar directamente después del '-jar' en la línea de comando (que no es el caso en la pregunta original) –

17

Eche un vistazo a mi respuesta a este question. Tenga en cuenta cómo puede usar echoargs.exe para diagnosticar este tipo de problemas. Lo más probable es la solución sería citar por ejemplo el parámetro:

java -jar "-Duser.language=en" any.jar 

Se puede probar que el uso de echoargs (de PowerShell Community Extensions):

echoargs -jar "-Duser.language=en" any.jar 
Arg 0 is <-jar> 
Arg 1 is <-Duser.language=en> 
Arg 2 is <any.jar> 
5

el uso de citas funciona bien para mí en PowerShell en Windows 7.

java "-Dmy.property=value" -jar myjar.jar 

Tenga cuidado: el nombre del jar debe colocarse justo después -jar, y se pasará argumentos realizados después -jar myjar.jar al programa dentro de jarFile.

Cuestiones relacionadas