2015-10-19 53 views
4

我很難找到如何正確使用ant目標中的args。如何將主機和端口參數傳遞給要由Java主函數使用的螞蟻

我有一個螞蟻目標,「我們的客戶端」,它應該採取兩個(或零)參數,主機和端口供客戶端收聽。我認爲通過輸入以下參數可以很容易地將參數傳遞給shell:

ant our-client -Dhost.arg=127.0.0.1 -Dport.arg=8081 

這似乎不起作用。在我的程序的主要功能中,我有一個記錄器,它可以打印出傳入的主機和端口。我將解釋我在我的ant構建文件中所具有的內容。

這是我爲客戶編寫的目標。

<target name="our-client" depends="package" description="compiles, packages, and runs the student client"> 
    <java jar="${java.dist}/catan-client.jar" dir="${java.dist}" fork="yes"> 
     <arg value="${host.arg}"/> 
     <arg value="${port.arg}"/> 
     <sysproperty key="com.sun.management.jmxremote" value=""/> 
     <assertions> 
      <enable/> 
     </assertions> 
    </java> 
</target> 

我似乎無法理解的部分是這些「arg's」如何工作。在ant構建文件的頂部,我已經定義了這兩個屬性,如下所示。

<property name="port.arg" value="8081"/> 
<property name="host.arg" value="localhost"/> 

我這樣做,使參數是可選的這個特定的目標。如果沒有提供,它將以默認設置運行。

回到我的程序的主要功能。無論什麼樣的我鍵入命令行中,主機總是被設置爲localhost,端口同樣設置爲8081。這是我的主要功能

public static void main(final String[] args) 
{ 
... 
    if (args.length == 2) 
    { 
    String host = args[0]; 
    String port = args[1]; 
    LOGGER.info("host: " + host + ", port: " + port); 
    } 
... 
} 

命令行總是顯示裏面的日誌部分:

INFO: host: localhost, port: 8081 

我認爲我一定在搞螞蟻命令調用一些東西。它在我看來,它忽略了輸入,並與每個屬性的默認值。

任何幫助表示讚賞。

+0

'-Dhost = 127.0.0.1 -Dport = 8081'設置屬性host和port,而不是host.arg和port.arg。使用'$ {host}'和'$ {port}'來引用命令行參數。 –

+0

我很抱歉。我錯誤地輸入了我的命令。我打算打字。 '-Dhost.arg = 127.0.0.1 -Dport.arg = 8081'我將修復我的帖子。 –

回答

3

問題來自於使用PowerShell。雖然您的ant命令在命令提示符下工作,但它不會像在PowerShell中那樣工作。 在PowerShell中,如果參數名稱中包含句點(「。」),PowerShell會將其作爲別的東西(可能是另一個ant命令)讀取。相反,嘗試這樣做:

ant our-client "-Dhost.arg=127.0.0.1" "-Dport.arg=8081" 
+0

謝謝!這工作完美! –

相關問題