We have been discussing this in the context of surefire, which uses
these extension mechanisms, so both Tibor, Andreas and I are fully
aware of what is possible. And as Jason says, there is a spectrum. I'm
not sure how the line would be drawn, since ant is very free-form
while gradle is "opinionated free form"; they have an idea of a
lifecycle like we do.

I think the root problem I personally want to solve is avoiding
monolithic plugins that puts every single maintenance need in our
hands and makes our mojos increasingly large and overlapping.

In such a context I would like a nice mechanism for user extensibility
that can be applied in lots of places; I could easily see large
plugins like assembly or surefire providing 20-100 extension points
each. Maybe maven core would need support for this, maybe just a
toolbox plugins can use - I've been pondering various alternatives. On
one extreme it would be possible to just keep the consumer pom and
move everything else to a scripted file; it would not be too hard and
actually fairly compatible. I'm not necessarily advocating such a
solution.

But I suppose this is where the initial disagreement starts. If you
want to keep your users from writing code that interacts with the
build or insist that they don the appropriate robes before doing so
(require a separate project and all that), we are simply not in the
same school of thought.

I agree with Igor and others that build tooling is a different "mode"
than end user code, so I also tend to think that just picking up
"stuff" that is littered in test scope in various random projects is
not a good idea. There are a ton of different approaches that could be
used to do something like this: Making a separate project is only one
of them. You could put extensions in
src/build/<plugin>-[<execution>].[bsh|groovy|fortran||scala] and just
have them execute as a post-init script on the plugin. Plugins could
even do that themselves without any assistance from core (but it would
get better with core support), just a small helper library that
invokes the proper language runtime. There might be one or two
practical problems with this approach, but nothing unsolvable. I would
find it logical that there might be *multiple* strategies for doing
this, supporting scripting, in-project module and external-module.

m2e is here because of maven, not the other way around. But I do
believe in re-using the good stuff we have, which is why in-project
module is my personal favourite since it has a very low footprint.

I might be several years too late for this whole ordeal. It might even
be that I'm just reinventing gradle.

Kristian

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
For additional commands, e-mail: dev-h...@maven.apache.org

Reply via email to