Le dim. 20 nov. 2022 à 07:59, Christoph Läubrich <m...@laeubi-soft.de> a
écrit :

> This does not really answer the question. Extensions are made for
> extending maven(-plugins) (either on the core or the project level) so
> if plugins are only ever getting maven4-api available how will it be
> possible then?
>

Hopefully it will not cause it breaks plugin design as explained.


> Whether or not Extensions are "bad" or not "maven spirit" seems a
> different topic for me.
>

Didnt say any of both, said it was and the way to go to achieve what you
want to do at plugin level against maven spirit.



> Am 19.11.22 um 14:51 schrieb Romain Manni-Bucau:
> > Sounds like some code needing to move to extensions more than some mojo
> > interactions to me to stick to a simple and maven spirit.
> >
> > Le sam. 19 nov. 2022 à 13:14, Christoph Läubrich <m...@laeubi-soft.de> a
> > écrit :
> >
> >>   > That's a good question.  Plugins currently don't interact.
> >>   > Is that really something we want ?
> >>
> >> At least there are several places where I wish I could "plug" into an
> >> existing plugin, curently for example surefire allows some limited
> >> extension using test-frameworks but this requires special configuration.
> >>
> >> A good example might be the "set-version" plugin, where in the context
> >> of Tycho one needs to also update versions not only in the
> >> pom.xml/dependency part, the current approach is we actually
> >> copy/replicate what set-version does, but this obviously is far from
> >> optimal. The same applies to jar-plugin (where for example BND plugin
> >> requires special setup/configuration) and even the release-plugin
> >> currently would be something where one needs to do special enhancement
> >> that are hard to maintain and manage.
> >>
> >> That's why I previously mentioned in a "we have one isolated mojo"
> >> scenario everything might looks easy and great, but when it comes to
> >> complex setups it gets complicated fast.
> >>
> >>   > I'd rather keep things simple if possible. They can use the Session
> >>
> >> I as well but the problem arises if you want to share more than a simple
> >> string or integer. For example currently Tycho has a project-extension
> >> and also a core-extension part and then people can configure different
> >> mojos ... for sure one can put everything in one big fat jar but that's
> >> really hard to manage and configure, so we have split this up into
> >> smaller mojos.
> >>
> >> Still they need to interact (e.g. to not calculate the same stuff over
> >> and over again)... this mostly works as we export some packages that are
> >> kind of "tycho-api" but as one don't write all from scratch there are of
> >> course other dependencies to consider. Even that works, but we always
> >> see issues with classpath incompatibilities that are really hard to
> >> track, e.g. if version of core-extension do not match 100% version of
> >> plugin used in the pom... And i have totally no clue what would happen
> >> if there is another extension also exporting the same dependency ...
> >>
> >>
> >> Am 19.11.22 um 09:37 schrieb Guillaume Nodet:
> >>> Requiring OSGi for anything user facing in maven is a no-go for me.
> >>>
> >>> Le sam. 19 nov. 2022 à 05:01, Christoph Läubrich <m...@laeubi-soft.de>
> a
> >>> écrit :
> >>>
> >>>>    > Dreaming: but what if not a flag, but some filter(s) for
> >> "capabilities"?
> >>>>
> >>>> OSGi support generic capabilities/requirements model:
> >>>>
> https://blog.osgi.org/2015/12/using-requirements-and-capabilities.html
> >>>>
> >>>> Just mentioning it ... for sure we one can re-implement this (again)
> in
> >>>> maven as well, as a prime goal seems not to reuse existing techniques
> >> ;-)
> >>>>
> >>>
> >>> I've been working full time on OSGi for 10 years or so.  So I'm quite
> >> aware
> >>> of the benefits... and the costs.
> >>> I don't think we need maven to provide any choice here.
> >>>
> >>>
> >>>>
> >>>> With all this perfect "only m4api" world I'm just wondering how will
> >>>> this work together with extensions (either core or project ones) and
> how
> >>>> is it supposed to allow different plugins to interact?
> >>>>
> >>>
> >>> That's a good question.  Plugins currently don't interact. Is that
> really
> >>> something we want ?
> >>> I'd rather keep things simple if possible.  They can use the Session
> >>>
> >>>
> >>>> Am 18.11.22 um 19:10 schrieb Tamás Cservenák:
> >>>>> Howdy,
> >>>>>
> >>>>> just to describe a bit what I meant under "reversed flag":
> >>>>>
> >>>>> default is iWillBeInChargeOfMyComponents=false, Maven4 behaves as
> >> today.
> >>>>> Plugin classrealm gets (from memory, might be incomplete or wrong):
> >>>>> - m4 API
> >>>>> - m3 "plugin-api"
> >>>>> - javax.inject
> >>>>> - resolver api
> >>>>> - etc as today
> >>>>>
> >>>>> consider that MANY plugins have components, and creating components
> in
> >>>>> MAJORITY of plugins is easy and should remain easy (and offered "out
> of
> >>>> the
> >>>>> box").
> >>>>
> >>>> Sounds good to me.
> >>>
> >>>
> >>>>> but IF iWillBeInChargeOfMyComponents=true, Maven 4 creates a plugin
> >> realm
> >>>>> that has m4 API accessible ONLY, NOTHING MORE. And in that sandbox,
> the
> >>>>> plugin can do whatever it wants, but still has access to m4 API (that
> >> is
> >>>>> heaven vs earth when compared to m3 state of affairs).
> >>>>
> >>>> Not sure there's any benefit.  If we use a custom package for a few DI
> >>> annotation,
> >>> there will be no conflict, so if there's no maven component defined,
> >>> nothing will be done
> >>> and the plugin is still free to use its own DI if it needs.
> >>>
> >>>
> >>>>> ===
> >>>>>
> >>>>> in future, when we drop m3 support, this could mean:
> >>>>>
> >>>>> false (default)
> >>>>> - m4 API
> >>>>> - javax.inject
> >>>>>
> >>>>> true
> >>>>> -m4 API
> >>>>>
> >>>>> ===
> >>>>>
> >>>>> Dreaming: but what if not a flag, but some filter(s) for
> >> "capabilities"?
> >>>>> values:
> >>>>> - * <- plugin classrealm should have all "capabilities" current Maven
> >>>>> runtime provides
> >>>>> - m4api <- I want maven 4 api ONLY
> >>>>> - m3api, slf4j, jsr330  <- I want to m3 api (would break in m4+ that
> >>>> drops
> >>>>> m3 backward compat), slf4j logging and would use jsr330 components
> >>>>> "capability"
> >>>>>
> >>>>> But this is getting too wild maybe :)
> >>>>
> >>>
> >>> Simple is good.
> >>>
> >>> Not touching maven 3 plugins or they way they are loaded at all, I'd
> >>> propose:
> >>>     * define a few annotations in org.apache.maven.api.di package, we
> >> really
> >>> don't need many, maybe just @Inject, @Bean
> >>>     * make sure the plugin classloader does only expose the api to
> maven
> >>> plugins
> >>>     * write a simplistic DI framework
> >>>     * make sure plugin can use a different DI framework if they need
> >>>
> >>> Guillaume
> >>>
> >>>> T
> >>>>>
> >>>>> On Fri, Nov 18, 2022 at 6:34 PM Tamás Cservenák <ta...@cservenak.net
> >
> >>>> wrote:
> >>>>>
> >>>>>> Howdy,
> >>>>>>
> >>>>>> Am -1 on this. We just reached the point to (somewhat) undo the
> "Maven
> >>>>>> downloads the whole world", at least latest plugins by putting Maven
> >> and
> >>>>>> friends in provided scope will not download dozens of versions of
> >>>>>> maven-core and friends... If we do this, at one point we would end
> up
> >>>> with
> >>>>>> plugins downloading dozens of DI container (or their versions), as
> >> even
> >>>> ASF
> >>>>>> plugins would not be in "lockstep".
> >>>>>>
> >>>>>> OTOH, that said, I like the idea of a flag, but I'd reverse it: a
> flag
> >>>>>> that would say maven "I will be in charge of my components"
> (defaults
> >> to
> >>>>>> false, Maven behaves as today). When true, it would mean Mojo wants
> to
> >>>>>> bootstrap some DI/whatever container of its own, and then, for
> plugins
> >>>> like
> >>>>>> these, Maven could even "narrow" the list of exported classes? (like
> >>>>>> javax.inject?)
> >>>>>>
> >>>>>> T
> >>>>>>
> >>>>>> On Fri, Nov 18, 2022 at 4:57 PM Guillaume Nodet <gno...@apache.org>
> >>>> wrote:
> >>>>>>
> >>>>>>> Following up on my previous response, and in a more realistic way
> >> than
> >>>>>>> switching to OSGi, I wonder if we should let maven 4 plugins do
> their
> >>>> own
> >>>>>>> DI injection and only care about the mojos, i.e. not rely on
> >>>> sisu/plexus
> >>>>>>> to
> >>>>>>> create and inject the mojo.  Mojos using the v4 api do not need to
> be
> >>>>>>> injected with other components from maven, they should all come
> from
> >>>> the
> >>>>>>> api and should be retrieved using Session.getService(xx), or simply
> >>>> using
> >>>>>>> session's shortcut methods.  The injection of Project and Session
> is
> >>>> not
> >>>>>>> controlled by sisu. For the ComponentConfigurator, we could change
> >> the
> >>>>>>> mojo
> >>>>>>> descriptor to have the full configuration class name for mojos that
> >>>>>>> require
> >>>>>>> custom configuration injection, the plugin manager being in charge
> of
> >>>>>>> instantiating this class and using it as a ComponentConfigurator
> >>>> (which is
> >>>>>>> not part yet of the api btw).
> >>>>>>>
> >>>>>>> Complex plugins which rely on plexus/sisu to do some custom
> injection
> >>>>>>> would
> >>>>>>> have to be changed to do their own DI, maybe using a simple Guice
> >>>> setup.
> >>>>>>>
> >>>>>>> If that sounds like too big a change for those plugins, we may be
> >> able
> >>>> to
> >>>>>>> add a flag on the mojo descriptor so that those v4-enabled mojos
> >> would
> >>>>>>> trigger a DI injection on behalf of the plugin.  But if we have to
> >>>>>>> implement something like that, I would go for a plain CDI-like api,
> >>>> either
> >>>>>>> using guice or another DI library supporting the javax.inject
> >> package,
> >>>> or
> >>>>>>> rather the jakarta.inject package, as it would be nice to switch to
> >> the
> >>>>>>> jakarta version at the same time.  Or maybe even plexus if we
> really
> >>>> need
> >>>>>>> to, but with a limited scope, i.e. no visibility on the maven
> >>>> components,
> >>>>>>> so that plugins are better decoupled from maven-core.
> >>>>>>>
> >>>>>>> Thoughts ?
> >>>>>>>
> >>>>>>> Le jeu. 17 nov. 2022 à 17:48, Guillaume Nodet <gno...@apache.org>
> a
> >>>>>>> écrit :
> >>>>>>>
> >>>>>>>> I do agree that debugging the provisioning side is *very*
> >> complicated
> >>>>>>> when
> >>>>>>>> there's a problem.
> >>>>>>>> I'd be happy to get rid of sisu/plexus and use a more simple DI
> >>>>>>> framework,
> >>>>>>>> at least for simple plugins.
> >>>>>>>> However, I definitely don't think pushing OSGi to plugins would
> be a
> >>>>>>> good
> >>>>>>>> idea : the cost and burden on plugin developers would outweigh the
> >>>>>>> benefits.
> >>>>>>>>
> >>>>>>>> For extensions, and for maven itself, that is a different story
> >>>> though.
> >>>>>>>> Maven and extensions could definitely benefit from OSGi, but this
> >>>> would
> >>>>>>> be
> >>>>>>>> a complete breakage and it would be hard to keep some level of
> >>>>>>>> compatibility.
> >>>>>>>>
> >>>>>>>> Le jeu. 17 nov. 2022 à 17:00, Christoph Läubrich <
> >> m...@laeubi-soft.de
> >>>>>
> >>>>>>> a
> >>>>>>>> écrit :
> >>>>>>>>
> >>>>>>>>>     > Guess classrealm is fine for maven, it does not bring much
> >> issues
> >>>>>>>>>
> >>>>>>>>> As long as it works, maybe, maybe even if you write a simple
> maven
> >>>>>>>>> plugin, but for any more complex it is just a complete mess.
> >>>>>>>>>
> >>>>>>>>> Last time I asked on the mailing list how to debug that stuff ...
> >>>>>>>>> complete silence ...
> >>>>>>>>>
> >>>>>>>>> Today I tried to refactor the name of one module of a more
> complex
> >>>>>>>>> maven-plugin (with core extension), now I end up with
> >>>>>>>>>
> >>>>>>>>> org.apache.maven.InternalErrorException: Internal error:
> >>>>>>>>> com.google.inject.ProvisionException: Unable to provision, see
> the
> >>>>>>>>> following errors:
> >>>>>>>>> 1) No implementation for org.eclipse.aether.RepositorySystem was
> >>>> bound.
> >>>>>>>>>
> >>>>>>>>> A whole bunch of stack trace but not a little info why the *****
> it
> >>>> is
> >>>>>>>>> not happy. Now I need to add random "exportedArtifact" /
> >>>>>>>>> "exportedPackage" stuff to hope finding out where it has lost a
> >>>>>>>>> transitive dependency, also here absolutely no documentation what
> >>>> this
> >>>>>>>>> is supposed to do/work exactly beside some introduction that
> these
> >>>> xml
> >>>>>>>>> tags exits and reading the code... or probably add maven-compat
> >>>>>>>>> anywhere... or change provided to compile scope (even maven is
> >>>> jelling
> >>>>>>>>> at me that's bad and I will be punished soon)... not counting the
> >>>> many
> >>>>>>>>> times where I messed up the realms because I accidentally trying
> to
> >>>> use
> >>>>>>>>> XppDom objects in extensions and plugins and something between
> got
> >>>>>>>>> messed up.
> >>>>>>>>>
> >>>>>>>>> With OSGi i get clear errors for missing requirements, I can
> >> clearly
> >>>>>>>>> share API (or declare I don't want to share it) and can reliable
> >> use
> >>>> it
> >>>>>>>>> without classlaoding problems.
> >>>>>>>>> If one wan't can even implement service filtering that would hide
> >> all
> >>>>>>>>> "illegal implemented API" ... and you can even make sure API is
> >>>>>>>>> (backward) compatible with implementation without waiting for a
> >>>> method
> >>>>>>>>> not found exception or alike.
> >>>>>>>>>
> >>>>>>>>> Beside that I find it often more clear to distinguish between API
> >>>> (that
> >>>>>>>>> is only implemented by the framework) and SPI (that might be
> >>>>>>> implemented
> >>>>>>>>> by extenders). So probably it would be good to have maven-api and
> >>>>>>>>> maven-spi (instead of "maven-core") to make this clear.
> >>>>>>>>>
> >>>>>>>>> Am 16.11.22 um 14:53 schrieb Romain Manni-Bucau:
> >>>>>>>>>> Hi,
> >>>>>>>>>>
> >>>>>>>>>> Guess classrealm is fine for maven, it does not bring much
> issues
> >>>>>>> (less
> >>>>>>>>>> than OSGi or JPMS to be concrete), the real issue is the
> stability
> >>>> of
> >>>>>>>>> the
> >>>>>>>>>> exposed API.
> >>>>>>>>>> Thanks the hard work Guillaume did on that for maven 4 I guess
> it
> >> is
> >>>>>>>>> mainly
> >>>>>>>>>> a matter of deciding what we do for maven 3.
> >>>>>>>>>> Due to the resources and work needed I assume we can just play
> the
> >>>>>>>>>> status-quo for maven 3.
> >>>>>>>>>> Remaining question is for maven 4 do we drop the compatibilty. I
> >>>>>>> don't
> >>>>>>>>> like
> >>>>>>>>>> much the idea but a compat layer can solve that smoothly for
> maven
> >>>>>>>> = 4
> >>>>>>>>> and
> >>>>>>>>>> limit the work needed, no?
> >>>>>>>>>>
> >>>>>>>>>> Romain Manni-Bucau
> >>>>>>>>>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> >>>>>>>>>> <https://rmannibucau.metawerx.net/> | Old Blog
> >>>>>>>>>> <http://rmannibucau.wordpress.com> | Github <
> >>>>>>>>> https://github.com/rmannibucau> |
> >>>>>>>>>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
> >>>>>>>>>> <
> >>>>>>>>>
> >>>>>>>
> >>>>
> >>
> https://www.packtpub.com/application-development/java-ee-8-high-performance
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> Le mer. 16 nov. 2022 à 13:00, Christoph Läubrich <
> >>>>>>> m...@laeubi-soft.de>
> >>>>>>>>> a
> >>>>>>>>>> écrit :
> >>>>>>>>>>
> >>>>>>>>>>> If you really like to separate API and get out of the
> >>>>>>> ClassRealm-Hell
> >>>>>>>>>>> OSGi would be much more suitable:
> >>>>>>>>>>>
> >>>>>>>>>>> https://issues.apache.org/jira/browse/MNG-7518
> >>>>>>>>>>>
> >>>>>>>>>>> Am 16.11.22 um 12:30 schrieb Gary Gregory:
> >>>>>>>>>>>> As much as I dislike JPMS, maybe Maven 4 should migrate to
> Java
> >> 9
> >>>>>>> or
> >>>>>>>>> 11
> >>>>>>>>>>> and
> >>>>>>>>>>>> adopt JPMS to better define its public APIs.
> >>>>>>>>>>>>
> >>>>>>>>>>>> Gary
> >>>>>>>>>>>>
> >>>>>>>>>>>> On Wed, Nov 16, 2022, 05:06 Tamás Cservenák <
> >> ta...@cservenak.net>
> >>>>>>>>> wrote:
> >>>>>>>>>>>>
> >>>>>>>>>>>>> Yes, to define rules is quite easy, but to make our users to
> >> obey
> >>>>>>>>> them
> >>>>>>>>>>> is
> >>>>>>>>>>>>> tricky :D
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> In general, I guess, we should. For this reason JapiCmp has
> >> been
> >>>>>>>>> used in
> >>>>>>>>>>>>> Resolver since 1.9.0 (as noted on refd page end).
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> But while this was "kinda simple" to achieve in Resolver, I
> am
> >>>>>>> really
> >>>>>>>>>>>>> unsure if it is doable in Maven (sans 4 API) :(
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Ultimately, this was the whole reason for API:
> >>>>>>>>>>>>> - users "grabbed" whatever could get hold on and used
> >>>>>>>>>>>>> - maven progress was really hindered by this, as that meant
> >>>>>>> modifying
> >>>>>>>>>>> (even
> >>>>>>>>>>>>> internal) interfaces without breaking clients was impossible,
> >> so
> >>>>>>> we
> >>>>>>>>> went
> >>>>>>>>>>>>> with tricks, and more tricks and even more tricks that now
> pays
> >>>>>>> back.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> The other day we had a question on ML about 4-alpha
> >> compatibility
> >>>>>>>>>>> breakage,
> >>>>>>>>>>>>> and from mail it was clear that the package of the referred
> >> class
> >>>>>>> was
> >>>>>>>>>>>>> having "internal" in it. I mean, developers should really
> take
> >>>>>>> care
> >>>>>>>>> of
> >>>>>>>>>>> what
> >>>>>>>>>>>>> they import.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> This is another huge plus for Takari lifecycle, it FORBIDS
> >>>>>>>>> compilation
> >>>>>>>>>>>>> against "encapsulated" internal classes....
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>
> >>>>>>>
> >>>>
> >>
> http://takari.io/book/40-lifecycle.html#enforcing-dependency-usage-during-compilation
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> T
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> On Wed, Nov 16, 2022 at 10:44 AM Konrad Windszus <
> >>>> k...@apache.org
> >>>>>>>>
> >>>>>>>>>>> wrote:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> I guess this is the easy part, the tricky question remains:
> Do
> >>>> we
> >>>>>>>>> need
> >>>>>>>>>>> to
> >>>>>>>>>>>>>> make sure that all Maven 3 API interfaces/classes stay 100%
> >>>>>>>>> backwards
> >>>>>>>>>>>>>> compatible until we reach 4.100/5.0/whatever?
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> This wasn't handled consistently in master till now, e.g.
> the
> >>>>>>>>> classes
> >>>>>>>>>>>>>> generated from
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>
> >>>>>>>
> >>>>
> >>
> https://github.com/apache/maven/blob/master/maven-plugin-api/src/main/mdo/lifecycle.mdo
> >>>>>>>>>>>>>> are now immutable, i.e. lack setter methods in Maven 4.
> >>>>>>>>>>>>>> My change in
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>
> >>>>>>>
> >>>>
> >>
> https://github.com/apache/maven/pull/827/files#diff-2324c8cead0ad922c829a8ca450764aa149d6efdfe7f841e64210f20efd148acR77
> >>>>>>>>>>>>>> was not backwards compatible (removed a method on an
> interface
> >>>>>>> which
> >>>>>>>>>>> may
> >>>>>>>>>>>>>> have been implemented by extensions...)
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Konrad
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> On 2022/11/16 09:35:15 Tamás Cservenák wrote:
> >>>>>>>>>>>>>>> Unsure we want to deprecate all of Maven :)
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> But yes, in general, 3.x "Maven API" was "all that users
> can
> >>>>>>> grab"
> >>>>>>>>>>>>> sadly,
> >>>>>>>>>>>>>>> and is probably our major source of problems and reason we
> >>>>>>> started
> >>>>>>>>>>>>> Maven
> >>>>>>>>>>>>>> 4
> >>>>>>>>>>>>>>> API.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> IMO, I'd consider them as "whole", and just say "starting
> >> with
> >>>>>>>>> Maven
> >>>>>>>>>>>>>>> 4.100/5.0/whatever" the maven-core (any class out of it) is
> >> NOT
> >>>>>>>>>>>>>> ACCESSIBLE
> >>>>>>>>>>>>>>> ANYMORE FROM PLUGINS.
> >>>>>>>>>>>>>>> And done.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Just as an example, here is what Maven Resolver has to say
> >>>> about
> >>>>>>>>> same
> >>>>>>>>>>>>>> topic
> >>>>>>>>>>>>>>> (part of not-yet-released, vote is in process 1.9.1
> version):
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>
> >>>>>>>
> >>>>
> >>
> https://maven.apache.org/resolver-archives/resolver-LATEST/api-compatibility.html
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> HTH
> >>>>>>>>>>>>>>> T
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> On Wed, Nov 16, 2022 at 10:26 AM Konrad Windszus <
> >>>>>>> k...@apache.org>
> >>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> I see now there is already
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>
> >>>>>>>
> >>>>
> >>
> https://github.com/apache/maven/blob/master/api/maven-api-meta/src/main/java/org/apache/maven/api/annotations/Provider.java
> >>>>>>>>>>>>>>>> but to me the javadoc is not explicit enough. It should
> >> state:
> >>>>>>>>> Only
> >>>>>>>>>>>>>> Maven
> >>>>>>>>>>>>>>>> is allowed to implement/extend types with this annotation.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Konrad
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> On 2022/11/16 09:20:11 Konrad Windszus wrote:
> >>>>>>>>>>>>>>>>> Hi,
> >>>>>>>>>>>>>>>>> Unfortunately Maven 3 didn’t define a proper API. In
> effect
> >>>>>>>>>>>>>> everything
> >>>>>>>>>>>>>>>> somehow exposed through class loaders was considered API
> by
> >>>>>>>>>>>>>>>> plugin/extension developers.
> >>>>>>>>>>>>>>>>> For Maven 4 a completely separate API was established in
> >>>>>>> package
> >>>>>>>>>>>>>>>> “org.apache.maven.api”, but what about the old packages
> used
> >>>>>>> and
> >>>>>>>>>>>>>> exported
> >>>>>>>>>>>>>>>> in Maven 3?
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> For example in the context of
> >>>>>>>>>>>>>>>> https://issues.apache.org/jira/browse/MNG-7588 <
> >>>>>>>>>>>>>>>> https://issues.apache.org/jira/browse/MNG-7588> I want to
> >>>>>>> evolve
> >>>>>>>>> the
> >>>>>>>>>>>>>>>> package “org.apache.maven.plugin.descriptor”.
> >>>>>>>>>>>>>>>>> We already figured out that this particular package
> >> (although
> >>>>>>> not
> >>>>>>>>>>>>>> part
> >>>>>>>>>>>>>>>> of the Maven 4 API) is used from both Maven Core as well
> as
> >>>>>>> Maven
> >>>>>>>>>>>>>> Plugin
> >>>>>>>>>>>>>>>> Tools, therefore this probably needs to stay backwards
> >>>>>>> compatible.
> >>>>>>>>>>>>>>>>> What about others like
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>
> >>>>>>>
> >>>>
> >>
> https://github.com/apache/maven/blob/master/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginManager.java
> >>>>>>>>>>>>>> ?
> >>>>>>>>>>>>>>>> <
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>
> >>>>>>>
> >>>>
> >>
> https://github.com/apache/maven/blob/master/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginManager.java
> >>>>>>>>>>>>>>>> ?>
> >>>>>>>>>>>>>>>>> This interface should IMHO never been implemented outside
> >>>>>>> Maven
> >>>>>>>>>>>>> Core
> >>>>>>>>>>>>>> but
> >>>>>>>>>>>>>>>> in fact it was exposed to all plugins/extensions (via
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>
> >>>>>>>
> >>>>
> >>
> https://github.com/apache/maven/blob/a6b1ebb1cd40ca4b288fdeb30c6d2460323aa25b/maven-core/src/main/resources/META-INF/maven/extension.xml#L40
> >>>>>>>>>>>>>>>> <
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>
> >>>>>>>
> >>>>
> >>
> https://github.com/apache/maven/blob/a6b1ebb1cd40ca4b288fdeb30c6d2460323aa25b/maven-core/src/main/resources/META-INF/maven/extension.xml#L40
> >>>>>>>>>>>>>>>>> ).
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> There are three options coming to my mind:
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> 1. Deprecate the interfaces we don’t consider API and
> >> create
> >>>>>>> new
> >>>>>>>>>>>>> ones
> >>>>>>>>>>>>>>>> for Maven 4 which are not exported!
> >>>>>>>>>>>>>>>>> 2. Modify the existing interfaces in a backwards
> compatible
> >>>>>>> way
> >>>>>>>>>>>>> (but
> >>>>>>>>>>>>>>>> somehow add a marker that they should not be implemented
> >>>>>>> outside
> >>>>>>>>>>>>> core)
> >>>>>>>>>>>>>>>>> 3. Modify the existing  interfaces in a backwards
> >> compatible
> >>>>>>> way
> >>>>>>>>>>>>> (but
> >>>>>>>>>>>>>>>> somehow add a marker that they should not be implemented
> >>>>>>> outside
> >>>>>>>>>>>>> core)
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> For all three options we somehow need to come up with a
> >> list
> >>>>>>> of
> >>>>>>>>>>>>>>>> classes/interfaces currently being exported through the
> API
> >>>>>>> class
> >>>>>>>>>>>>>> loader,
> >>>>>>>>>>>>>>>> which should be considered private and agree on an
> >>>>>>>>> Annotation/Javadoc
> >>>>>>>>>>>>>> for
> >>>>>>>>>>>>>>>> that (something like
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>
> >>>>>>>
> >>>>
> >>
> https://github.com/mulesoft/api-annotations/blob/40b258afeff6560241dee5001ed00f1deb392e47/src/main/java/org/mule/api/annotation/NoImplement.java#L29
> >>>>>>>>>>>>>>>> <
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>
> >>>>>>>
> >>>>
> >>
> https://github.com/mulesoft/api-annotations/blob/40b258afeff6560241dee5001ed00f1deb392e47/src/main/java/org/mule/api/annotation/NoImplement.java#L29
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> or
> >> https://wiki.eclipse.org/API_Javadoc_tags#The_New_Solution
> >>>>>>> <
> >>>>>>>>>>>>>>>>
> https://wiki.eclipse.org/API_Javadoc_tags#The_New_Solution>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> WDYT?
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Konrad
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>
> >> ---------------------------------------------------------------------
> >>>>>>>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> >>>>>>>>>>>>>>>> For additional commands, e-mail:
> dev-h...@maven.apache.org
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>
> >> ---------------------------------------------------------------------
> >>>>>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> >>>>>>>>>>>>>> For additional commands, e-mail: dev-h...@maven.apache.org
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>
> ---------------------------------------------------------------------
> >>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> >>>>>>>>>>> For additional commands, e-mail: dev-h...@maven.apache.org
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >> ---------------------------------------------------------------------
> >>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> >>>>>>>>> For additional commands, e-mail: dev-h...@maven.apache.org
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>> --
> >>>>>>>> ------------------------
> >>>>>>>> Guillaume Nodet
> >>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>> --
> >>>>>>> ------------------------
> >>>>>>> Guillaume Nodet
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> >>>> For additional commands, e-mail: dev-h...@maven.apache.org
> >>>>
> >>>>
> >>>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> >> For additional commands, e-mail: dev-h...@maven.apache.org
> >>
> >>
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> For additional commands, e-mail: dev-h...@maven.apache.org
>
>

Reply via email to