Как передать свойства в jar из Powershell?

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

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

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

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

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

Спасибо заранее,

Привет,

jgran

Ответ 1

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

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

Вы можете проверить, используя эхо-сигналы (из Расширения сообщества PowerShell):

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

Ответ 2

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

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

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

Ответ 3

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

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) раньше.