2009-10-05 27 views
10

我一直在使用Powershell-1.0作为命令行需求,而不是cmd.exe。 不幸的是,使用java时还有一些注意事项。 我需要一个属性传递给一个罐子,这样的:如何从Powershell传递属性到jar?

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

这条线工作正常输入cmd.exe,但不是在PowerShell中,因为它搜索另一个罐子: 无法访问jar文件user.language = en

使用引号不起作用。

它可以在Powershell-1.0中使用,还是我错过了java中的某些东西?

由于提前,

问候,

jgran

+0

这是很好,你在cmd.exe中试用它,当我下面的命令发生在我的类路径不可用时,我只是在'其他地方'解决'我的问题'。谁会认为PowerShell是原因。 'java -Djasypt.encryptor.password = pass -jar my.jar' – 2017-04-21 10:11:54

回答

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

+0

PowerShell对传递给java的-D选项做了一些奇怪的事情,所以这不起作用。见Keith Hill的回答。 – 2011-03-21 09:57:29

+0

@Johannes Powershell将命令行的疯狂捣乱留在一边,我的答案仍然是,JAR名称必须*总是*紧跟在命令行上的'-jar'之后(原始问题中不是这样) – 2011-03-22 13:17:25

17

看看我对这个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> 
5

使用引号,我在Windows 7

工作正常使用PowerShell
java "-Dmy.property=value" -jar myjar.jar 

注意:罐子名称必须-jar后右侧放置,并放置-jar myjar.jar后参数将被传递给程序里面有这个jar文件。

相关问题