我之前在stackoverflow上看到了一些类似的问题,但没有看到任何解决方案。我想答案可能是不可能的,我想看看谁可以给我这个确认。
AFAIK,一个蚂蚁项目包含几个目标,每个目标可能有几个任务。有一个任务MacroDef定义了“事物”的顺序(我想要的任务?)。我试图将目标放在这个块中但是ant抱怨目标的名称丢失(我使用macrodef的属性来生成目标的名称)。所以这可能是一个死胡同。
然后我发现通过使用任务“脚本”,我们可以访问项目,甚至可以从那里调用addTarget / AddOrReplaceTarget。但似乎我在那里创建的目标对运行目标没有影响。
这是否意味着ant不支持在目标运行时操纵依赖项?在开始构建依赖图之前,有没有办法生成这些目标?
添加一个例子(ant -f a.xml compile)
<?xml version="1.0" ?>
<project name="myproj" basedir=".">
<target name="init">
<script language="javascript"><![CDATA[
importPackage (org.apache.tools.ant) ;
var t = project.getCopyOfTargets ().get ("standard-compile") ;
var nt = new Target () ;
var echo = project.createTask ("echo") ;
echo.setMessage ("hello world") ;
nt.addTask (echo) ;
nt.setName ("custom-compile") ;
t.addDependency (nt) ;
project.addTarget ("custom-compile", nt) ;
]]></script>
</target>
<extension-point name="standard-compile" depends="init" />
<target name="compile" depends="standard-compile" />
</project>
(在实际问题中,我添加的目标可以是动态的(不同数量的目标和不同的目标),这里我只是用硬代码来说明这个想法。)