2011-12-25 59 views
4

我正在使用java ant來爲某些實體生成證書和密鑰庫,稍後我將在java應用程序中使用它。 該應用程序僅用於學習目的,我知道以純文本存儲密碼是一個壞主意。禁用java ant生成的警告

的命令,我使用的是:

<exec command="keytool -genkey -alias test -keyalg DSA -keysize 1024 
    -keystore keyst.ks -keypass pass -storepass pass -dname &quot; 
    CN=Duke, OU=MyUnit, O=MyOrg, C=US&quot;"/> 

雖然如預期的指令作品,每行後,我正在給一對夫婦的警告:

[exec] The command attribute is deprecated. 
[exec] Please use the executable attribute and nested arg elements. 

我很好奇,如果有任何方法可以抑制這些警告,除了不使用嵌套參數。 該腳本會生成大量的文本輸出,並且警告使其難以跟蹤輸出。

回答

7

exec任務的command屬性已被棄用,當我使用Ant第一次開始以來一直螞蟻1.5。我懷疑它會保持已棄用相當長的時間。除警告外沒有其他問題,但您也可以使用替代它的execute屬性。

唯一的問題是,execute屬性(不像command屬性)假設命令名稱可以包含空格,所以你不能簡單地塞進整個命令進入execute屬性。相反,你必須使用<arg> subtesk在該命令的參數來傳遞:

<exec executable="keytool"> 
    <arg line="-genkey -alias test -keyalg DSA -keysize 1024 -keystore keyst.ks -keypass pass -storepass pass -dname &quot;CN=Duke, OU=MyUnit, O=MyOrg, C=US&quot;" 
</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>子任務太多的linevalue類型:

<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> 

至少,我認爲沒有任何問題之前完成。

3

是的,請閱讀警告。不要使用command屬性;使用executable和嵌套的arg元素。

http://ant.apache.org/manual/Tasks/exec.html

所以它會是這樣的:

<exec executable="keytool"> 
<arg value="-genkey"/> 
<!-- I'll leave the rest for you; read the docs --> 
</exec>