2014-03-24 77 views
0

我正在使用WLST Ant任務,該任務允許在參數屬性下傳遞空格分隔參數列表。WLST參數中的Ant任務空白

問題是當我傳遞一個包含空格的文件目錄時。例如「程序文件」,它成爲程序和文件的兩個參數。

有什麼建議可以解決這個問題嗎?

以下我的建議只適用於一個值。 例如,將「Program Files」參數附加到從已知結束參數到sys.argv實際結束的結尾和循環中。 IE如果我們想讓「程序文件」成爲第四個系統參數,那麼在WLST腳本中我們追加sys.argv [4],[5] ... [結束]。

+0

你嘗試給:程序\文件? – Mani

+0

剛剛嘗試過,沒有運氣。 – IanWatson

+0

也試過了空格轉義字符。 問題是任何空格字符都被解釋爲刪除符。 – IanWatson

回答

0

WLST 11.1.1.9.0的簡短答案:您無法避開此問題。

我有同樣的問題,並調試了一下。

我的發現:在 通過命令行WLSTInterpreterInvoker的weblogic-11.1.1.9.jar調用的類WLSTTask其解析ARGS:

private void parseArgs(String[] arg) { 
    for (int i = 0; i < arg.length; i++) { 
     this.arguments = (this.arguments + " " + arg[i]); 
} 
[...] 

的原因,我不知道這些ARG遊戲重新分析,前在python腳本調用:

private void executePyScript() { 
    [...] 
    if (this.arguments != null) { 
     String[] args = StringUtils.splitCompletely(this.arguments, " "); 
    [...] 


public static String[] splitCompletely(String paramString1, String paramString2) 
{ 
    return splitCompletely(new StringTokenizer(paramString1, paramString2)); 
} 

private static String[] splitCompletely(StringTokenizer paramStringTokenizer) { 
    int i = paramStringTokenizer.countTokens(); 
    String[] arrayOfString = new String[i]; 

    for (int j = 0; j < i; j++) arrayOfString[j] = paramStringTokenizer.nextToken(); 
    return arrayOfString; 
} 

可惜的StringTokenizer方法不區分引用的字符串等sys.argv中Python中獲得獨立的參數,即使你報價參數

有兩個可能的選擇:

  • 在螞蟻與其他的東西(例如20%)和「解碼」他們在Python替換空間。
  • 在Ant中編寫屬性文件並從Pyhton中讀取屬性文件。

爲executePyScript()中12.2.1的代碼已經改變了很多,看來,問題可能出現了(我沒有檢查)

if ((this.arguments.indexOf("\"") == -1) && (this.arguments.indexOf("'") == -1)) 
    args = StringUtils.splitCompletely(this.arguments, " "); 
else { 
    args = splitQuotedString(this.arguments); 
}