开发者

How can I run all the targets in an Ant buildfile?

I would like to execute all targets instead of specifying each one.

For example:

<?xml version="1.0"?>
<project name="Kte" default="all" basedir="/home/Kte">

    <target name="target1">
    </target>

    <target name="target2">
    </target>
</project>

Currently I have use:

$ ant target1
$ ant target2

I'd like to use:

$ ant

and have both targets get built (this is just an example. Reality开发者_如何学Python I have a long ever changing Ant buildfile with sub-ant files so would be very handy to have an "all" feature.


You could create an ant task all, which depends on all the specific targets that you have...

<target name="all" depends="target1, target2, ... ">
</target>

ant all


You can also set up a default task that will run when you just type ant. The default attribute is in the project element.

<project name="foo" default="all">
  <target name="all" depends="target1, target2"/>
  <target name="target1">
   ...
  </target>
  <target name="target2">
   ...
  </target>
</project>

$ ant


Because Ant is declarative it doesn't do this sort of thing nicely. You might consider a script task though.

Ant buildfiles have an implicit un-named target that 'holds' all the tasks that are not part of named targets. So this, placed at the top-level, would do what you describe.

<script language="javascript"><![CDATA[
    importClass( java.util.Vector );

    vec = new Vector( project.getTargets().keySet() );
    vec.setSize( vec.size( ) - 1 );
    project.executeTargets( vec );
]]>
</script>

(The implicit target appears at the end of the list, hence the size adjustment to prevent recursion.)

If you put that script in a 'runner' target - which would execute all other targets in the buildfile - you would need to remove the 'runner' from the Vector (and the implicit target-with-no-name) to prevent recursion.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜