Я использовал Powershell-1.0 для потребностей командной строки некоторое время вместо cmd.exe. К сожалению, существуют все еще некоторые протесты при использовании Java. Я должен передать свойство банке, как этот:
java -jar -Duser.language=en any.jar
Эта строка хорошо работает в cmd.exe, но не в Powershell, поскольку это ищет другую банку: Неспособный к доступу jarfile пользователь language=en
Используя кавычки не помогает.
Действительно ли это выполнимо в Powershell-1.0, или я пропускаю что-то в Java?
Заранее спасибо,
С уважением,
jgran
Взгляните на мой ответ на этот вопрос . Обратите внимание, как вы можете использовать echoargs.exe для диагностики подобных проблем. Скорее всего, исправление будет заключаться в цитировании параметра, например:
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>
Попробуйте вместо этого запустить следующий шаблон:
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
) ранее.