我使用java ant是为了为一些实体生成证书和密钥库,稍后我将在java应用程序中使用。该应用程序仅用于学习目的,我知道以明文形式存储密码是一个坏主意。
我使用的命令是:
<exec command="keytool -genkey -alias test -keyalg DSA -keysize 1024
-keystore keyst.ks -keypass pass -storepass pass -dname "
CN=Duke, OU=MyUnit, O=MyOrg, C=US""/>
尽管该命令按预期工作,但在每一行之后,我都得到了几个警告:
[exec] The command attribute is deprecated.
[exec] Please use the executable attribute and nested arg elements.
我很好奇,除了不使用嵌套参数之外,是否有任何方法可以抑制这些警告。该脚本生成大量文本输出,并且警告使跟踪输出变得更加困难。
exec
任务上的command
属性已经被弃用了,从Ant 1.5开始,当我第一次开始使用Ant时。我怀疑在相当长的一段时间内将被弃用。除了警告之外没有任何问题,但是您不妨使用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
字段的参数不再需要围绕它的"
。<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>
至少,我以前做过没有任何问题。
是的,请阅读警告。不要使用command
属性;使用executable
和嵌套的arg元素
所以它看起来像这样:
<exec executable="keytool">
<arg value="-genkey"/>
<!-- I'll leave the rest for you; read the docs -->
</exec>