像这样的ANT任务怎么可能:
<target name="mytask">
<echo>processing ${blabla}</echo>
</target>
打印processing mytask
?
我应该用什么替换blabla
?或者这实际上是可能的?
如果您的版本足够新,可以支持javascript,那么这可能适用于香草Ant。
<scriptdef name="currenttarget" language="javascript">
<attribute name="property"/>
<![CDATA[
importClass( java.lang.Thread );
project.setProperty(
attributes.get( "property" ),
project.getThreadTask(
Thread.currentThread( ) ).getTask( ).getOwningTarget( ).getName( ) );
]]>
</scriptdef>
<target name="foobar">
<currenttarget property="my_target" />
<echo message="${my_target}" />
</target>
scriptdef
设置了一个任务currenttarget
,该任务可用于获取属性中的当前目标,然后您可以根据需要使用它。
任务名称总是由Ant输出到控制台:
这里有一个例子:
<project default="test">
<target name="test" depends="mytask-silent, mytask-echo"/>
<target name="mytask-echo">
<echo>processing</echo>
</target>
<target name="mytask-silent"/>
</project>
这是输出:
C:tmpant>ant
Buildfile: c:tmpantbuild.xml
mytask-silent:
mytask-echo:
[echo] processing
test:
BUILD SUCCESSFUL
Total time: 0 seconds
我知道它做到这一点的唯一方法是编写一个ANT任务或使用一个groovy脚本,如下所示:
<target name="mytask" depends="init">
<taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="build.path"/>
<groovy>
println "processing ${target}"
</groovy>
</target>