Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ANT-检索当前任务名称_Ant_Reference_Task - Fatal编程技术网

ANT-检索当前任务名称

ANT-检索当前任务名称,ant,reference,task,Ant,Reference,Task,像这样的ANT任务怎么可能: <target name="mytask"> <echo>processing ${blabla}</echo> </target> 正在处理${blabla} 打印处理我的任务 我应该用什么替换blabla?或者这实际上是可能的?任务名称始终由Ant输出到控制台: 以下是一个例子: <project default="test"> <target name="test" depe

像这样的ANT任务怎么可能:

<target name="mytask">
  <echo>processing ${blabla}</echo>
</target>

正在处理${blabla}
打印
处理我的任务


我应该用什么替换
blabla
?或者这实际上是可能的?

任务名称始终由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>

我知道它这样做的唯一方法是编写一个ANT任务或按如下方式使用:

<target name="mytask" depends="init">
    <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="build.path"/>

    <groovy>
        println "processing ${target}"
    </groovy>
</target>

println“正在处理${target}”

如果您的版本足够新,能够支持javascript,那么这可能适用于vanilla 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已经可以这样做了。不,这只是一个示例。我想用目标名称创建一个文件。文件创建者是Ant还是external(读取输出)?您的意思似乎不是target,而是task。这似乎是一个奇怪的要求。您希望知道当前目标的名称,以便可以在同一目标中使用该值来执行某些操作(创建文件)。你正在写目标。它有一个名字。在目标的正文中再次键入名称。为什么您需要在运行时动态发现名称?这回答了您最初的问题,但不是您在注释中更新的实际需求。确实如此。谢谢,但是你的回答没有帮助。
<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>