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

时间:2009-10-05 07:40:14

标签: java powershell jar properties

我一直在使用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

3 个答案:

答案 0 :(得分:20)

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

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

您可以使用echoargs(来自PowerShell Community Extensions)测试:

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

答案 1 :(得分:7)

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

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

注意:jar名称必须放在-jar之后,-jar myjar.jar之后放置的参数将传递给jar文件中的内部

答案 2 :(得分:2)

尝试使用以下模式启动:

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设置系统属性)。