我之前在 stackoverflow 上看到了一些类似的问题,但没有看到任何解决方案。我想答案可能是不可能的,我想看看谁能给我这个确认。
AFAIK,一个蚂蚁项目包含几个目标,每个目标可能有几个任务。有一个任务 MacroDef 定义了一系列“事物”(我想是任务?)。我试图将目标放在这个块中,但 ant 抱怨缺少目标的名称(我正在使用宏定义的属性来生成目标的名称)。所以这可能是一个死胡同。
然后我发现通过使用任务“脚本”,我们可以访问项目,甚至可以从那里调用 addTarget/AddOrReplaceTarget。但似乎我在那里创建的目标对正在运行的目标没有影响。
这是否意味着 ant 不支持在目标运行时操作依赖项?在 ant 开始构建依赖图之前,有什么方法可以生成这些目标?
添加示例(ant -f a.xml 编译)
<?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>
(在实际问题中,我添加的目标可以是动态的(不同数量的目标和不同的目标),这里我只是硬编码一个来说明这个想法。)