Java 如何在ant命令中传递空值,以便它替换build.xml文件中的属性值

Java 如何在ant命令中传递空值,以便它替换build.xml文件中的属性值,java,ant,Java,Ant,我正在将ant参数构造为字符串数组,并将其传递给ProcessBuilder类(JAVA)以运行它。 例如 下面是XML片段,其中的文本将被替换: <target name="antTarget" ....> ... <![CDATA[ <cred> <username>${username}</username>

我正在将ant参数构造为字符串数组,并将其传递给ProcessBuilder类(JAVA)以运行它。 例如

下面是XML片段,其中的文本将被替换:

<target name="antTarget" ....>
...
<![CDATA[

                        <cred>
                            <username>${username}</username>
                            <password>${password}</password>
                        </cred>
]]>
...
</target>

...
${username}
${password}
]]>
...
现在,如果我没有收到来自调用方的用户名和密码(因为它们是可选的),我最终会得到如下值:

                        <cred>
                            <username>-Dpassword</username>
                            <password>${password}</password>
                        </cred>

-Dpassword
${password}

同样的代码似乎在Linux中工作,但在Windows机器中不工作。

将变量括在双引号内。例如:

String doubleQuotes = isWindows ? "\"" : "";
String[] args = { antHome + "/bin/" + command, "-f", xmlHome + "/path/to/xmlFile.xml",
                "-lib", libHome,
                "-Dusername=" + doubleQuotes + username + doubleQuotes,"-Dpassword=" + doubleQuotes + password + doubleQuotes,
                "antTarget" };
将上述解决方案与讨论中的解决方案进行比较

String doubleQuotes = isWindows ? "\"" : "";
String[] args = { antHome + "/bin/" + command, "-f", xmlHome + "/path/to/xmlFile.xml",
                "-lib", libHome,
                "-Dusername=" + doubleQuotes + username + doubleQuotes,"-Dpassword=" + doubleQuotes + password + doubleQuotes,
                "antTarget" };