exec 任务上的 command 属性已被弃用,并且自我第一次开始使用 Ant 时的 Ant 1.5 以来一直存在。我怀疑它会在很长一段时间内保持弃用。除了警告之外没有任何问题,但您不妨使用 execute 属性来替换它。
唯一的问题是execute 属性(与command 属性不同)假定命令名称可以包含空格,因此您不能简单地将整个命令塞进execute 属性中。相反,您必须使用<arg> 子任务来传递命令的参数:
<exec executable="keytool">
<arg line="-genkey -alias test -keyalg DSA -keysize 1024 -keystore keyst.ks -keypass pass -storepass pass -dname "CN=Duke, OU=MyUnit, O=MyOrg, C=US""
</exec>
最后一个参数-dname 可能会出现问题。但是,您可以使用<arg value="> 子任务来解决这个问题:
<exec executable="keytool">
<arg value="-genkey"/>
<arg value="-alias"/>
<arg value="test"/>
<arg value="-keyalg"/>
<arg value="DSA"/>
<arg value="-keysize"/>
<arg value="1024"/>
<arg value="-keystore"/>
<arg value="keyst.ks"/>
<arg value="-keypass"/>
<arg value="pass"/>
<arg value="-storepass"/>
<arg value="pass"/>
<arg value="-dname"/>
<arg value="CN=Duke, OU=MyUnit, O=MyOrg, C=US"/>
</exec>
注意-dname 字段的参数不再需要&quot;。 <arg value> 明白这是一个单一的值,尽管有空格。
您也可以组合<arg> 子任务的line 和value 类型:
<exec executable="keytool">
<arg line="-genkey -alias test -keyalg DSA -keysize 1024"/>
<arg line="-keystore keyst.ks -keypass pass123 -storepass pass123 -dname"/>
<arg value="CN=Duke, OU=MyUnit, O=MyOrg, C=US"/>
</exec>
至少,我之前已经做到了,没有任何问题。