2008/11/10 Paul Gier <[EMAIL PROTECTED]>

> What about adding new syntax to the goal string?  So that from the command
> line you could write something like this to refer to specific execution
> configs:
>
> mvn eclipse:eclipse{execution-1}
> or
> mvn eclipse:eclipse{execution-2}
>

How would that interact with the lifecycle?

If I define execution-1 as attached to the compile phase, does that mean
that Maven will execute all phases upto compile and then just execute
eclipse:eclipse, or is it just executing eclipse:eclipse and ignoring any
plugins that are attached to prior phases? (With the side effect that I'd
loose the information of the extra attached source directories)

The more I think about it, calling out a specific execution *that has been
attached to a specific phase* is a bad bad pattern, and it's a good thing
that Maven does not let you do that.

If you need to do a pile of every-so-often tasks I'd define them in profiles
with each profile attaching the plugins to the requisite phases and defining
the defaultGoals to the highest phase necessary.


>
> The curly braces already seem to be associated with execution ids in
> maven's logging output.  This would mean that components.xml file in maven
> core could be changed to provide execution IDs for each plugin that is
> executed, but probably no one wants to manually update this all the time.
>
> IMO the wildcard syntax is more than what is needed, and will make the pom
> a little less readable.  The choice should be configure all executions or
> just one, otherwise it starts getting too complicated.
>
> After looking into the current behavior a little more, it is possible to
> execute the same plugin goal twice in the same phase.  So I think all the
> naming schemes proposed except maybe Brett's
> (groupId:artifactId:sequenceNumber) could run into conflicts in the future.
>  But if we include a sequence number, then what happens if you add another
> execution of an existing plugin to the lifecycle?  Do all the sequence
> numbers have to increment to make room?
>

Plus sequence number is non-deterministic.  Also, you are forgetting... this
is not the id of executions *defined within the pom* but it's the id of
executions *defined by either the lifecycle or the plugin's mojo bindings*

I don't see how a mojo's descriptor can bind to any more than one phase, so
I guess the only thing preventing uniqueness is if the lifecycle can invoke
the same goal multiple times in the same phase... but hang on, how is that a
problem if we say that the execution is per phase (unless you want to
configure the different multiple executions differentially.... sounds like
you're writing a severe hack)


> I think if we add the goal name to the execution like Benjamin suggested,
> we will be unlikely to run into conflicts.  So I would prefer something
> like:
>
> default-lifecycle-compile
> default-lifecycle-testCompile
>

No, what if I bind compile goal to the compile phase and process-classes?

Now I have an execution that is bound to two phases (not allowed) or two
executions with the same id (not allowed)

I'm sorry, but I don't see how you can exclude the phase from the
execution's id...

And given that phases consist of names separated by -, it seems confusing to
name them with - as a separator.

Now I don't mind if we do

default-lifecycle:compile
default-lifecycle:test-compile

or

lifecycle:compile
lifecycle:test-compile

or

lifecycle:jar:compile
lifecycle:jar:test-compile

or even use a different separator ('/' anyone?)

The only advantage of specifying the packaging type is if you have a common
root pom.  Wildcards only become really important if you use packaging in
the id, but there is still the issue of what if I need to specify something
for all executions (but keep the defaults outside of an execution different
for when executing goals directly from the command line)

I can live without wildcards.

Sequence numbers are either non-deterministic, or will end up having a 1:1
mapping with each phase, so why not just use the phase.  Goal is non-unique,
and has the problem of multiple executions, and we can likely get away with
just phase anyway.


> When building, this logs to the command line like this:
> [INFO] [compiler:compile {execution: default-lifecycle-compile}]
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to