【发布时间】:2018-11-06 09:27:47
【问题描述】:
在我的 ant 构建文件中有一个属性:
<property name="pwd" value="" description="value set external"/>
此属性由用户通过 GUI 设置。 稍后我想调用一个java任务并将属性“pwd”的值作为参数传递给java类:
<java classname="package.and.classname" dir="${directory}" fork="yes" failonerror="true">
<arg line="-u ${user}"/>
<arg line="-p ${pwd}"/>
<classpath>
<pathelement path="[...]"/>
</classpath>
</java>
在用户拥有包含单引号 (') 或单双引号 (") 的密码之前,此方法可以正常工作。
-p pass'word 中的不平衡引号
好的 - 简单的解决方法:
<arg line="-p "${pwd}""/>
但下一种情况是 pwd = pass"word。然后错误:
"The syntax of the command is incorrect."
如果同时使用 (' 和 ") 会发生什么?
我试图用&quot; 和/或&apos; 转义引号,但最终行为并没有真正改变。
即使我将每个参数的<arg line> 与<arg value> 交换,问题仍然存在(但实际上现在仅用于双引号或混合大小写)。
例如:
<arg value="-u"/>
<arg value="${user}"/>
<arg value="-p"/>
<arg value="${pwd}"/>
可以使用pwd=pass'word,但不能使用pwd=pass"word 或pwd=pass&quot;word。
有什么方法可以告诉 ant pwd 的值不应该被计算?
【问题讨论】:
-
我已经为此工作了几天,但我想不出解决方案。我唯一想到的是,您能否在设置密码时以某种方式处理密码,而不是在使用密码时?这是我唯一能想到的尝试。
-
"命令的语法不正确。"可能是 Windows shell 错误消息。可能值得在详细模式下运行 Ant 以确切了解 java fork 是如何被调用的,以防万一那里有一个“额外的 shell 层”在 args 上绊倒。
标签: xml ant escaping quotation-marks