I'm using java ant in order to generate certificates and keystores for some entities, which I will use in a java app later. The application is for learning purposes only, I know it's a bad idea to store passwords in plain text.
The command that i'm using is :
<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""/>
Although the command works as expected, after each line i'm given a couple of warnings :
[exec] The command attribute is deprecated.
[exec] Please use the executable attribute and nested arg elements.
I'm curious if there is any way that I can surpress these warnings, other than not using nested args. The script generates a lot of text output, and the warnings make it harder to track the output.
The command
attribute on the exec
task has been deprecated and has been since Ant 1.5 when I first started using Ant. I suspect that it will remain deprecated for quite a long time. There's no issue besides the warning, but you might as well use the execute
attribute which replaces it.
The only issue is that the execute
attribute (unlike the command
attribute) assumes that command names can contain whitespace, so you can't simply cram the entire command into the execute
attribute. Instead, you must use the <arg>
subtesk to pass in the parameters for the command:
<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>
That last parameter, -dname
might present a problem. However, you can use the <arg value=">
subtask to get around this problem:
<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>
Note that the parameter for the -dname
field no longer needs "
around it. The <arg value>
understands this is a single value despite whitespace.
You can combine the line
and value
types of the <arg>
subtask too:
<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>
At least, I've done that without any issues before.
Yes, read the warning. Don't use the command
attribute; use executable
and nested arg elements.
http://ant.apache.org/manual/Tasks/exec.html
So it'd look like this:
<exec executable="keytool">
<arg value="-genkey"/>
<!-- I'll leave the rest for you; read the docs -->
</exec>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With