2009-10-05 57 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文件。

相關問題