中有<groovy>
範圍(see the documentation for more details),更具體地有ant
對象,它是的AntBuilder
(see the api here)的實例中,與該對象可以調用getProject()
方法獲取的org.apache.tools.ant.Project
和與該實例一些綁定對象Project
您可以使用executeTarget(java.lang.String targetName)
方法執行通過其名稱的不同目標。所有在一起的樣子:ant.getProject().executeTarget("yourTargetName")
並在代碼:
<target name="query">
<taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="libraries"/>
<groovy>
import groovy.sql.Sql
def sql = Sql.newInstance("jdbc:oracle:thin:@mydomain.com:1521:alias", "test", "test", "oracle.jdbc.pool.OracleDataSource")
List productNames = sql.rows("SELECT name from PRODUCT")
//println(productNames.count)
productNames.each {
println it["name"]
ant.getProject().executeTarget("yourTargetName")
}
properties."productNames" = productNames
</groovy>
</target>
編輯基於評論:
將參數傳遞給螞蟻調用它通過org.apache.tools.ant.Project
方法是不可能的,但有另一種方式來做到這一點使用ant
或antcall
任務通過AntBuilder
,使用antcall
但它不是內<groovy>
支持,如果你嘗試使用它,你將收到此錯誤信息:
antcall not supported within AntBuilder, consider using 'ant.project.executeTarget('targetName')' instead
所以你必須使用ant
任務。例如,如果您有遵循Ant目標與參數在build.xml
:
<target name="targetTest">
<echo message="param1=${param1}"/>
</target>
您可以從<groovy>
調用它傳遞一個參數是這樣的:
<target name="targetSample">
<taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="groovyLibs"/>
<groovy>
ant.ant(antfile:'build.xml'){ // you antfile name
target(name:'targetTest') // your targetName
property(name:'param1',value:'theParamValue') // your params name and values
}
<groovy>
</target>
如果您執行此<groovy>
對象例ant targetSampe
您將獲得:
targetTest:
[echo] param1=theParamValue
BUILD SUCCESSFUL
Total time: 0 seconds
希望這有助於
感謝提示。你知道我怎麼可以在executeTarget方法中將參數添加到「yourTargetName」任務中?我沒有看到任何額外的參數。 – bontade 2014-10-31 11:12:38
我會更新我的答案以適應您的新要求':)' – albciff 2014-11-04 09:48:28