如何从Powershell将属性传递给jar?

jgr*_*ran 13 java powershell jar properties

我一直在使用Powershell-1.0作为命令行需求,而不是cmd.exe.不幸的是,使用java时仍有一些注意事项.我需要将属性传递给jar,就像那样:

java -jar -Duser.language=en any.jar
Run Code Online (Sandbox Code Playgroud)

这行在cmd.exe中工作正常,但在Powershell中没有,因为它搜索另一个jar:无法访问jarfile user.language = en

使用引号没有帮助.

它在Powershell-1.0中是可行的,还是我在Java中遗漏了什么?

提前致谢,

问候,

jgran

Kei*_*ill 21

看看我对这个问题的回答.请注意如何使用echoargs.exe来诊断这些问题.最有可能的解决方法是引用参数,例如:

java -jar "-Duser.language=en" any.jar
Run Code Online (Sandbox Code Playgroud)

您可以使用echoargs(来自PowerShell社区扩展)测试它:

echoargs -jar "-Duser.language=en" any.jar
Arg 0 is <-jar>
Arg 1 is <-Duser.language=en>
Arg 2 is <any.jar>
Run Code Online (Sandbox Code Playgroud)


mmu*_*ler 8

在Windows 7上的PowerShell中使用引号可以正常工作.

java "-Dmy.property=value" -jar myjar.jar
Run Code Online (Sandbox Code Playgroud)

小心:罐子名称必须后立即放置-jar,并放置后的参数-jar myjar.jar将被传递到程序里面的jar文件.


Ada*_*kin 2

尝试使用以下模式启动:

java -Duser.language=en -jar any.jar
Run Code Online (Sandbox Code Playgroud)

假设 user.language 是一个系统属性。如果您将其视为命令行参数,请将其更改为:

java -jar any.jar -Duser.language=en
Run Code Online (Sandbox Code Playgroud)

事实上,我很惊讶你提到的命令行可以在 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
...
Run Code Online (Sandbox Code Playgroud)

因此基本上您应该始终将 JAR 文件名直接放在-jar命令行选项之后,并将任何 JVM 选项(例如使用 设置系统属性-D)放在前面。

  • PowerShell 对传递给 java 的 -D 选项做了一些奇怪的事情,所以这不起作用。请参阅基思·希尔的回答。 (2认同)