WLST Ant Task参数中的空格

时间:2014-03-24 20:26:42

标签: ant jython wlst

我正在使用WLST Ant任务,该任务允许在arguments属性下传递空格分隔的参数列表。

问题是当我传递包含空格的文件目录时。例如" Program Files"这成为程序和文件的两个参数。

有什么建议可以解决这个问题吗?

我的建议只适用于一个值。 例如,附加" Program Files"结束的参数和从已知结束参数到sys.argv实际结束的循环。 IE如果我们想要" Program Files"成为第四个系统参数然后在WLST脚本中我们附加sys.argv [4],[5] ... [end]。

1 个答案:

答案 0 :(得分:0)

WLST 11.1.1.9.0的简短回答:你无法解决这个问题。

我遇到了同样的问题,调试了一下。

我的发现: weblogic-11.1.1.9.jar中的WLSTTask类通过命令行WLSTInterpreterInvoker调用,该命令行解析args:

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

由于原因,我不知道在调用python脚本之前会再次解析这些args:

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方法不区分引用的字符串,因此Python中的sys.argv获取单独的参数,即使引用参数

有两种可能的选择:

  • 将Ant中的空格替换为其他内容(例如%20),并在Python中“解码”它们。
  • 在Ant中编写属性文件,并在Pyhton中读取。

12.2.1中的executePyScript()代码发生了很大的变化,似乎问题可能已经消失了(我还没有检查过)

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