maven-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Lennart Jörelid <lennart.jore...@gmail.com>
Subject Re: Plugable/Softcoded/Customized Maven Plugins
Date Fri, 16 Jan 2015 16:22:04 GMT
Oh - and I see I forgot the surrounding transformers element within the
configuration, but we all realize that, right? To make this work with
maven's DI, it should have read:

<configuration>
    <transformers>
      <coffeCooker implementation="your.coffee.ExtensionCooker"/>
      <breadBaker implementation="your.bread.Processor"/>
      ....
    </transformers>
</configuration>


2015-01-16 17:17 GMT+01:00 Lennart Jörelid <lennart.jorelid@gmail.com>:

> I usually handle the case with replacing default plugin functionality with
> non-mandatory (and, hopefully, well-documented) plugin parameters, similar
> to the following:
>
> *Within a locally defined AbstractMojo subclass:*
> protected abstract List<Transformer> getTransformers();
>
> *In the concrete Mojo (which extends the locally defined AbstractMojo
> subclass):*
> @Parameter
> private Transformer[] transformers;
>
> @Override
> protected List<Transformer> getTransformers() {
>
>    if(transformers == null || transformers.length == 0) {
>      // Fallback to a defined standard of transformers, defined within
> this Mojo.
>      return STANDARD_TRANSFORMERS;
>    }
>
>    // All done.
>    return Arrays.<Transformer>asList(transformers);
> }
>
> This ensures that the call to getTransformers() always returns a non-null
> result, and that any user-supplied configuration fully replaces the
> defaults. If user configuration should be treated as an *extension* to
> the locally provided STANDARD_TRANSFORMERS, I adjust the logic in the
> getTransformers method - and the documentation - accordingly.
>
> This approach is programmatically trivial, but requires updated and
> sensible documentation (Which are the standard Transformers? Does
> user-supplied configuration replace standards or add to them?). I fully
> understand that there are no maven-defined standards for this behaviour -
> it is implemented in every plugin that needs it.
>
> 2015-01-16 9:36 GMT+01:00 Kristian Rosenvold <kristian.rosenvold@gmail.com
> >:
>
>> Lennart;
>>
>> Is there a good solution for having the user-provided implementation
>> *replace* the built-in one ?
>>
>>
>> Kristian
>>
>>
>> 2015-01-15 21:29 GMT+01:00 Lennart Jörelid <lennart.jorelid@gmail.com>:
>> > I believe that it is important to let the POM serve as a configuration
>> (for
>> > a set of Plugin-clad operations).
>> > If we permit the POM to be the host of scripts, I suggest that overall
>> > build stability would be compromised.
>> >
>> > If one wants to implement a chain-of-command or extension pattern
>> within a
>> > Plugin, it is simple enough.
>> >
>> >
>> >    - Define an interface (say Transformer) holding methods defining a
>> >    behaviour
>> >    - Define an array or list of these Transformers within your plugin,
>> as
>> >    shown below.
>> >    - In your execute() method, simply call them in order.
>> >    - You have now defined a behaviour; Maven's standard mechanics permit
>> >    you to inject several different implementations
>> >
>> >
>> >
>> > @Parameter
>> > private Transformer[] transformer;
>> >
>> > with the configuration
>> >
>> > <configuration>
>> >      <coffeCooker implementation="your.coffee.ExtensionCooker"/>
>> >      <breadBaker implementation="your.bread.Processor"/>
>> >      ....
>> > </configuration>
>> >
>> > This may not be a very obvious way to implement an extension, but it
>> > certainly works. The enforcer plugin, which was mentioned above uses
>> this
>> > type of mechanics to permit injecting custom rules (of type
>> EnforcerRule).
>> >
>> > Would this type of extension cover the needs? Or am I missing your
>> point,
>> > Tibor?
>> >
>> >
>> > 2015-01-15 21:09 GMT+01:00 Jason van Zyl <jason@takari.io>:
>> >
>> >> Ok, stay within what's here.
>> >>
>> >> I posit that the default lifecycle and binding to it with mojos
>> provides
>> >> sufficient means of extension. So we have a lifecycle and at the other
>> >> extreme in Ant and Gradle we have an arbitrary DAG. Along that
>> spectrum I'm
>> >> not sure I understand what you think the problem is.
>> >>
>> >> I also posit that you can make Java-based extension mechanisms today.
>> >> Maybe not scriptable ones but you can provide extension points.
>> >>
>> >> I gather that the "whole issue" you're talking about is it
>> extensibility?
>> >> If so I was only trying to draw attention to facilities that are
>> present
>> >> you may not be familiar with.
>> >>
>> >> On Jan 15, 2015, at 2:54 PM, Kristian Rosenvold <
>> >> kristian.rosenvold@gmail.com> wrote:
>> >>
>> >> > Jason;
>> >> >
>> >> > We have been talking at length about what we think is wrong with the
>> >> > plugin model in this thread.  I'm happy to hear that you have solved
>> >> > things within the existing model in Takari. From what I've picked up
>> >> > It sounds like you have made an even greater monotlith than what we
>> >> > already have, so it appears you may not consider this whole issue a
>> >> > problem.
>> >> >
>> >> > The solutions you describe are things we know about. I still consider
>> >> > this to be an important problem; maybe the most important problem we
>> >> > are facing.
>> >> >
>> >> > Kristian
>> >> >
>> >> > 2015-01-15 20:36 GMT+01:00 Jason van Zyl <jason@takari.io>:
>> >> >> What do you think is unclear about the default lifecycle that you
>> >> augment by adding new executions to a particular phase in the
>> lifecycle?
>> >> You can also make your own lifecycle if you wish but for the most part
>> the
>> >> default lifecycle is sufficient. Or even cahnge all the bindings for
>> the
>> >> default lifecycle. For the Takari Lifecycle which has completely
>> different
>> >> implementations we didn't need any changes to the default lifecycle we
>> just
>> >> bound new implementations.
>> >> >>
>> >> >> There is also nothing stopping you from adding extensions points
to
>> >> plugins. You can do that today, the enforcer plugin being a case in
>> point.
>> >> This mechanism already exists where you can create an extension point
>> as a
>> >> collection that gets injected into a plugin, and new implementations
>> of the
>> >> extension will be loaded dynamically when added as dependencies to that
>> >> plugin in the POM. We can add this to any plugin today. If you wanted
>> to
>> >> provide an extension point to the maven-jar-plugin to filter the
>> manifest
>> >> before writing it into the JAR you can do that now.
>> >> >>
>> >> >> On Jan 15, 2015, at 5:57 AM, Tibor Digana <tibordigana@apache.org>
>> >> wrote:
>> >> >>
>> >> >>> Maybe Jason can bring some light into this discussion.
>> >> >>> Jason?
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>> --
>> >> >>> View this message in context:
>> >>
>> http://maven.40175.n5.nabble.com/Plugable-Softcoded-Customized-Maven-Plugins-tp5823365p5823611.html
>> >> >>> Sent from the Maven Developers mailing list archive at Nabble.com.
>> >> >>>
>> >> >>>
>> ---------------------------------------------------------------------
>> >> >>> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
>> >> >>> For additional commands, e-mail: dev-help@maven.apache.org
>> >> >>>
>> >> >>
>> >> >> Thanks,
>> >> >>
>> >> >> Jason
>> >> >>
>> >> >> ----------------------------------------------------------
>> >> >> Jason van Zyl
>> >> >> Founder,  Apache Maven
>> >> >> http://twitter.com/jvanzyl
>> >> >> http://twitter.com/takari_io
>> >> >> ---------------------------------------------------------
>> >> >>
>> >> >> happiness is like a butterfly: the more you chase it, the more
it
>> will
>> >> >> elude you, but if you turn your attention to other things, it will
>> come
>> >> >> and sit softly on your shoulder ...
>> >> >>
>> >> >> -- Thoreau
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> ---------------------------------------------------------------------
>> >> >> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
>> >> >> For additional commands, e-mail: dev-help@maven.apache.org
>> >> >>
>> >> >
>> >> > ---------------------------------------------------------------------
>> >> > To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
>> >> > For additional commands, e-mail: dev-help@maven.apache.org
>> >> >
>> >>
>> >> Thanks,
>> >>
>> >> Jason
>> >>
>> >> ----------------------------------------------------------
>> >> Jason van Zyl
>> >> Founder,  Apache Maven
>> >> http://twitter.com/jvanzyl
>> >> http://twitter.com/takari_io
>> >> ---------------------------------------------------------
>> >>
>> >> First, the taking in of scattered particulars under one Idea,
>> >> so that everyone understands what is being talked about ... Second,
>> >> the separation of the Idea into parts, by dividing it at the joints,
>> >> as nature directs, not breaking any limb in half as a bad carver might.
>> >>
>> >>   -- Plato, Phaedrus (Notes on the Synthesis of Form by C. Alexander)
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
>> >> For additional commands, e-mail: dev-help@maven.apache.org
>> >>
>> >>
>> >
>> >
>> > --
>> >
>> > --
>> > +==============================+
>> > | Bästa hälsningar,
>> > | [sw. "Best regards"]
>> > |
>> > | Lennart Jörelid
>> > | EAI Architect & Integrator
>> > |
>> > | jGuru Europe AB
>> > | Mölnlycke - Kista
>> > |
>> > | Email: lj@jguru.se
>> > | URL:   www.jguru.se
>> > | Phone
>> > | (skype):    jgurueurope
>> > | (intl):     +46 708 507 603
>> > | (domestic): 0708 - 507 603
>> > +==============================+
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
>> For additional commands, e-mail: dev-help@maven.apache.org
>>
>>
>
>
> --
>
> --
> +==============================+
> | Bästa hälsningar,
> | [sw. "Best regards"]
> |
> | Lennart Jörelid
> | EAI Architect & Integrator
> |
> | jGuru Europe AB
> | Mölnlycke - Kista
> |
> | Email: lj@jguru.se
> | URL:   www.jguru.se
> | Phone
> | (skype):    jgurueurope
> | (intl):     +46 708 507 603
> | (domestic): 0708 - 507 603
> +==============================+
>
>


-- 

--
+==============================+
| Bästa hälsningar,
| [sw. "Best regards"]
|
| Lennart Jörelid
| EAI Architect & Integrator
|
| jGuru Europe AB
| Mölnlycke - Kista
|
| Email: lj@jguru.se
| URL:   www.jguru.se
| Phone
| (skype):    jgurueurope
| (intl):     +46 708 507 603
| (domestic): 0708 - 507 603
+==============================+

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message