2011-09-22 17 views
1

我想要一個包含命令行傳遞參數的ant任務。命令行參數可以在數量上有所不同。 具體來說,爲螞蟻內的<java>任務。可以將可變數量的cmd行參數轉發給任務的Ant規則/任務

我想這樣做在命令行:

$ ant run foo bar ... 

理想的情況下,「富」與「酒吧」等論調「...」,將作爲尾隨參數傳遞給Java實例傳遞創建於<java>任務中。
的Java將看到:

$ java -classpath ./output Foobar foo bar ... 

換句話說,我想同螞蟻<的Java >任務執行以下操作:

$ ant run foo 
# executes "java -classpath ./output Foobar foo" 

$ ant run foo bar 
# executes "java -classpath ./output Foobar foo bar" 

$ ant run foo bar baz 
# executes "java -classpath ./output Foobar foo bar baz" 



我想象這可能看起來像:

<project name="Foobar" basedir="."> 
    <property name="build" location="output"/> 
    <target name="run" > 
     <java failonerror="true" classname="Foobar" fork="true"> 
      <classpath> 
       <dirset dir="${build}" /> 
      </classpath> 
      <arg line="[email protected]"/> 
     </java> 
    </target> 
</project> 

Noti ce線

  <arg line="[email protected]"/> 

我想像上面的東西會傳遞所有剩餘的參數到java實例。 (這個問題的目的是找到特定的螞蟻機制)。




我已經看到了這個require preconfigured ant variables的方法。即,

$ ant run -DARG1="foo" -DARG2="bar" ... 

但是該方法排除了可變長度參數列表。

有誰知道參數可變數目可能被轉發到螞蟻<的Java >任務的方法(最好不需要編寫一套複雜的螞蟻規則)?

回答

0

,由於Ant的command line看起來像這樣不容易:

ant [options] [target [target2 [target3] ...]] 

這意味着您的變量ARG列表foo bar baz項目將被視爲目標,從而導致類似命名的Ant目標正在運行,或者如果螞蟻引發錯誤他們不存在。

一種選擇是使用-Doption=value語法通過包裝腳本傳遞可變參數列表。也許:

ant -classpath ./output -Dmy_args=\"[email protected]\" Foobar 
在shell腳本

,然後利用通過ARG在java任務:

<arg line="${my_args}"/> 

另一種選擇是編寫一個Java的main()類,將接受的參數如你所希望的那樣,然後給你打電話給Ant。