Re: Acessing ANTs execution graph

Parag Doke <[email protected]>
Newsgroups gmane.comp.jakarta.ant.user
Message-ID <CAMo90pVSznKwLTdJzDQFTk+rRGaLyQ0VHa7OqY7Pe1tyNvn2Lw@mail.gmail.com>
If you download
https://github.com/downloads/ggtools/GrandUI/grand-ui-0.7.2.tar.gz, unzip,
replace ant.jar and ant-launcher.jar with updated jars ... and then launch
the bat file on Windows with a 32 bit JRE, it will render a visual for you
(including extension points).

I was also working on something similar a short while back ... and simply
decided to use the depends attribute.
For example:
<extension-point name="-jar" depends="compile"/>

<target name="module.specific.jar" extensionOf="-jar"
depends="another.jar.target">
...
</target>


Parag Doke
Save paper, save trees. Do not print emails/documents unless absolutely
necessary.

On Sun, Apr 19, 2015 at 1:21 AM, Stefan Bodewig <[email protected]> wrote:

> [pretty impressive build setup, kudos]
>
> On 2015-04-14, Stranzenbach, Ralf wrote:
>
> >     <target name="clean" depends="-clean" />
> >     <extension-point name="-clean" />
>
> >     <target name="recompile" depends="-recompile" />
> >     <extension-point name="-recompile" depends="-clean, -compile" />
>
> ...
>
> >     <target name="recompile-clean" extensionOf="-clean"
> if="is.Recompile" >
> >         <echo>Additional behaviour for recompile</echo>
> >     </target>
>
>
> >     <target name="-recompile-switch">
> >         <property name="is.Recompile" value="true" />
> >     </target>
>
>
> Before I go into Java options, none of them nice, couldn't you add a
> dependency to "-clean" that was an (empty) extensionPoint itself and
> make "-recompile-switch" and extension of that extensionPoint?
>
>
> > Now my question(s):
>
> > ================
>
>
> > Are there any ways to define the order of execution to guarantee an
> > optional task just like "-recompile-switch" to execute at the right
> > moment?
>
> Maybe, but not in a nice way.
>
> After figuring out the dependency graph Ant prepares an array of target
> names and passes them to the registered Executor instance - by default
> org.apache.ant.helpers.DefaultExecutor.  You could replace it with an
> executor of your own (by setting the property ant.executor.class when
> starting Ant), inject your switch target and delegate to
> DefaultExecutor.  Of course this would be a one-off solutions, but at
> least you don't need the overhead of antcall.
>
> The actual graph building happens in Project's topoSort method
>
> \begin{digression}
> This actually answers your second question
>
> >  Is there any way using the Java API to the ANT core to inspect the
> >  execution graph?
>
> project.topoSort(targetsInvokedOnCommandLine, project.getTargets(), false)
>
> should work.
> \end{digression}
>
> Unfortunately we are making it pretty difficult to inject a Project
> implementation of your own, it is hard coded in Ant's Main.  This means
> if you simply wanted to override topoSort you'd not only need  subclass
> of Project but your own implementation of AntMain as well.
>
> > Unfortunately it is impossible to manipulate the execution graph at
> > runtime, conditionally <import>ing different extesions.
>
> I don't think this is completely true.  <import> is a task itself, it
> uses some support in Ant's ProjectHelper but you can write a task of
> your own that performs the same actions.  Whether you could
> conditionally imprt different extensions depends on what you'd want
> to base your decision on.  It would work for anything that is fixed at the
> point in time when Ant parses the build file.  This includes properties,
> but unfortunately it does not include the targets specified at the
> command line (they are fixed, but there is no way to know them in a top
> level task).
>
> If the aditional dependency extensionPoint doesn't work, the most clean
> solution would be a custom Project and AntMain - but it would also imply
> quite a bit of work.
>
> Stefan
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.