ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Nicolas Lalevée <nicolas.lale...@hibnet.org>
Subject Re: Maybe we should open up "depends" for all targets [again]
Date Wed, 16 Dec 2009 13:12:37 GMT
On Sat, 12 Dec 2009 13:03:45 +0100, Jean-Louis Boudart
<jeanlouis.boudart@gmail.com> wrote:
> How about:
> 
> <target-inteface name="foo"/>
> <target name="bar" implements="foo"/>
> 
> /me run and hides!
> 
> 2009/12/12 Nicolas Lalevée <nicolas.lalevee@hibnet.org>
> 
>> On Fri, 11 Dec 2009 11:51:30 -0600, Dominique Devienne
>> <ddevienne@gmail.com> wrote:
>> > On Fri, Dec 11, 2009 at 6:32 AM, Xavier Hanin
<xavier.hanin@gmail.com>
>> > wrote:
>> >> 2009/12/10 Stefan Bodewig <bodewig@apache.org>
>> >>> and would do away with any notion of target composition people way
>> >>> expect from the name target-*group*.
>> >> I also think the name target-group is confusing for something that
>> >> doesn't
>> >> provide any composition. [...] What do you think this:
>> >> <target name="foo" dependencies="open"/>
>> >> <target name="bar" join-depends="foo"/>
>> >
>> > Like in a SQL join you mean? ;)
>> >
>> >> But I'm not good at finding names, so maybe I should just go back to
>> >> my
>> >> work :-)
>> >
>> > Frankly I think the Maven terminology of a "goal" is appropriate
here.
>> > The fact that a goal is implemented as a target that has no tasks is
>> > an impl detail. I think it easier that a goal is a higher level
>> > abstraction that the target, and that target can choose to
participate
>> > into one and only one goal. Whether goals themselves should only
>> > depend on goals might be a good idea. Goals would define the
"abstract
>> > interface" to the build system and logic, and targets become its
>> > implementation. As I wrote, a target can belong to only a single
goal,
>> > but can depend on targets or goals, as long as the DAG is acyclic.
>>
>> I think that "abstract interface" target and "implementation" target
>> seems
>> to fit very well into my use case I presented earlier. It was about a
>> build
>> script expecting some target implementation to be run before some
other;
>> expecting "build-jar", "build-flex" to be run before "ivy-install". And
>> then the abstract target is "dist".
>>
>> Then about the term "goal", I don't find it self explaining, but if in
>> Maven there is the same exact notion, I am good with not spreading new
>> terms for the same ideas. On the other hand if there would be non
trivial
>> difference, we shouldn't choose "goal". I cannot say thought, I don't
>> know
>> Maven enought.

I have found the interesting part in the Maven book [1]. So in Maven,
there are some defined "lifecycles". A lifecycle defines a sequence of
"phases". And there are "goals" that get attached to "phases". It doesn't
seems there is a particular build graph, goals doesn't seem to declare any
particular dependencies. On the other hand the phases are ordered in the
lifecycle.
The end user usually launch "phases" ('install'), but he can also launch
goals ('jar:jar': if nothing have been explicitely build, then that jar
will be empty, no dependency on some 'compile').

So as far as I understand Ant targets could be then compared to maven
goals for their implementation part, and maven phases for their
dependencies among them. Target groups in the current implementation are
then just phases (and if I remember correctly I was named phases when they
were initially suggested).

Finally as targets already decribe the build graph, I see no real need to
add another element for that, further more knowing that I am not sure we
have a clear view of what it should actually be. And it might be confusing
for build writers how and when to use target groups rather than simple
targets. I think we should focus on the real feature which is needed here:
be able to _append/hook_ some nodes to an "external" build graph without
_modifying_ it. Then I would be quite pragmatic and suggest to just  add
this feature to the actual Ant model, here the targets.
In EasyAnt there is already this notion of phase. But I see no real
conflict with not supporting target groups in Ant. EasyAnt could just
implement phases as targets, it would be "just" an implementation detail.

Nicolas

[1] http://www.sonatype.com/books/maven-book/reference/lifecycle.html

>>
>> Nicolas
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
>> For additional commands, e-mail: dev-help@ant.apache.org
>>
>>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org


Mime
View raw message