Можно ли получить доступ к "имени" целевой цели внутри муравьиной макродеф?
Было бы здорово, если бы я мог сделать что-то вроде:
<macrodef name="process-target">
<attribute name="target" default="?enclosing.target.name?" />
...
</macrodef>
<target name="myTarget>
<process-target/>
</target>
2 ответа
Нужно использовать скрипт для доступа к имени цели следующим образом:
<project name="demo" default="run1">
<macrodef name="process-target">
<sequential>
<script language="javascript">
project.setProperty("enclosing.target.name", self.getOwningTarget());
</script>
<echo message="${enclosing.target.name}"/>
</sequential>
</macrodef>
<target name="run1">
<process-target/>
</target>
<target name="run2">
<process-target/>
</target>
</project>
Я помещаю это здесь, потому что я хотел иметь необязательный атрибут в основной муравей.
<macrodef name="process-target">
<attribute name="target" default="_not_set_" />
<sequential>
<property name="_target_" value="@{target}" />
<script language="javascript">
if(project.getProperty("_target_") == "_not_set_") {
project.setProperty("_target_", self.getOwningTarget());
}
</script>
<echo message="${_target_}"/>
</sequential>
</macrodef>