I don't see how phase is really needed. It applies to only two plugins
that I can think of, compiler and resources, and this is a bigger
problem for a 3.x timeframe. I think that something simple can cover 90%
of the cases and be doable in 2.x


-----Original Message-----
From: Paul Gier [mailto:[EMAIL PROTECTED] 
Sent: Monday, November 10, 2008 4:05 PM
To: Maven Developers List
Subject: Re: Default plugin execution id

Yes, you're right, I think this is getting more complicated that it
needs to be.
Either of these is fine with me:
default-lifecycle:goal
or
default-lifecycle:phase

Either of them should be pretty easy to implement, and pretty unlikely
to cause 
any new problems.  If we just use default by itself, then we don't
resolve 
compile/testCompile or other similar situations.

Brian E. Fox wrote:
> I think we've gone way off the rails here. I see there's a proposal
but
> haven't reviewed it yet.
> 
> The first portion of this discussion was rather small in scope:
> Currently default executions of plugins have a null id. The null is
used
> to indicate the default config for a plugin across all executions AND
is
> used for lifecycle bound or plugins run on the cli. I think we simply
> should start by separating this. Keep default to replace the current
> null values for the global plugin configuration as it applies across
all
> executions. Then define an id for the lifecycle and cli invocations to
> be applied to tweak the values as needed (but keeping default to apply
> across all). Going beyond this into multifaceted ids for packages etc
is
> far too complicated imo.
> 
> -----Original Message-----
> From: Paul Gier [mailto:[EMAIL PROTECTED] 
> Sent: Monday, November 10, 2008 3:44 PM
> To: Maven Developers List
> Subject: Re: Default plugin execution id
> 
> Stephen Connolly wrote:
>> 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 just said that sequence numbers are the only way suggested that
> completely 
> avoid id conflicts, but you're right it has other problems.
> 
> I don't think it's a severe hack to have two executions for the same
> plugin goal 
> in the same phase.  For example, let's say I want to generate three
jar
> files 
> with different manifests during the package phase.  I need to call the
> assembly 
> or jar plugin three times with different configurations.  I'm just
> saying it's 
> possible to have this scenario even in a default lifecycle, so there
is
> a small 
> possibility of a name conflict even if we use something like
> lifecycle-<packaging>-<phase>-<plugin>-<goal>
> 
>>> 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.
>>
> 
> Adding the phase to the ID doesn't prevent name conflicts, since you
can
> have 
> the same goal twice in the same phase.  I would guess it's actually be
> more 
> common to have a goal twice in the same phase vs. in different phases.
> So I 
> think the goal name is a better qualifier than the phase.
> 
>> 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]
>>>
>>>
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to