Как передать свойства банке из Powershell? - PullRequest
13 голосов
/ 05 октября 2009

Некоторое время я использовал Powershell-1.0 для нужд командной строки вместо cmd.exe. К сожалению, при использовании Java все еще есть некоторые предостережения. Мне нужно передать свойство банке, например:

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

Эта строка отлично работает в cmd.exe, но не в Powershell, поскольку ищет другой jar: Невозможно получить доступ к jarfile user.language = ru

Использование кавычек не помогает.

Это возможно в Powershell-1.0, или я что-то пропускаю в Java?

Заранее спасибо,

С уважением,

jgran

Ответы [ 3 ]

20 голосов
/ 05 октября 2009

Посмотрите на мой ответ на этот вопрос . Обратите внимание, как вы можете использовать echoargs.exe для диагностики подобных проблем. Скорее всего, исправление будет заключаться в кавычки параметра, например ::1003*

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

Вы можете проверить это с помощью echoargs (из Расширения сообщества PowerShell ):

echoargs -jar "-Duser.language=en" any.jar
Arg 0 is <-jar>
Arg 1 is <-Duser.language=en>
Arg 2 is <any.jar>
7 голосов
/ 03 ноября 2011

Использование кавычек прекрасно работает для меня в PowerShell в Windows 7.

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

Будьте осторожны: имя фляги должно быть помещено сразу после -jar, а аргументы, помещенные после -jar myjar.jar, будут переданы в программу внутри jarFile.

2 голосов
/ 05 октября 2009

Попробуйте запустить вместо этого, используя следующий шаблон:

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

Это предполагает, что user.language подразумевается как системное свойство. Если вы имели в виду аргумент командной строки, измените его на:

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

Я на самом деле удивлен, что упомянутая вами командная строка работает вообще за пределами powershell (хотя я и подтвердила, что она хорошо работает и для меня, даже в Linux), и также немного странно, что внутри все будет работать по-другому за пределами powershell.

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

Таким образом, вы должны всегда указывать имя файла JAR непосредственно после параметра командной строки -jar, а любые параметры JVM (например, задавать системные свойства с помощью -D) перед.

...