I still think that the id has to include the phase that the execution is bound to. I'm not tied to specification of the packaging, but I do think that the phase (given that an execution is associated with one and only one phase) has to be part of the id for *lifecycle introduced* executions.
-Stephen 2008/11/10 Brian E. Fox <[EMAIL PROTECTED]> > 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] > >