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

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

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

这行在cmd.exe中工作正常,但在Powershell中没有,因为它搜索另一个jar:无法访问jarfile user.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  

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

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

注意:jar名称必须放在-jar之后,而放在-jar myjar.jar之后的参数将被传递给-jar myjar.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= set a system property ... 

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