On Sun 24 Sep 2017 at 17:44, Robert Scholte <rfscho...@apache.org> wrote:

> Are these questions we can/should answer within a couple of days?
> I'm not aware of somebody hitting the regression as caused by MNG-5742
> other than Igor.
> However, we've seen a couple of changed behavior clearly caused by
> MNG-6209 (not answering if this intended or not)
>
> We could also make the decision to leave MNG-6209 out, do a new release
> and complete our investigation directly afterwards.
> This change is way too tricky to do additional changes under pressure.


If we drop 3.5.1 i’d be in favour of reverting both MNG-6209 and MNG-6275
(the TCCL one) as I have found documentation stating that TCCL is the
plugin classloader, which makes me wary of changing that in a patch release
(but I can be convinced otherwise)


>
> thanks,
> Robert
>
>
> On Sun, 24 Sep 2017 18:07:39 +0200, Stephen Connolly
> <stephen.alan.conno...@gmail.com> wrote:
>
> > https://maven.apache.org/guides/mini/guide-maven-classloading.html says:
> >
> >> When a build plugin is executed, the thread's context classloader is set
> > to the plugin classloader.
> >
> > So we'll need to fix something somewhere...
> >
> >
> https://svn.apache.org/repos/infra/websites/production/maven/content/reference/maven-classloading.html
> > is unaccessible from the website due to a rewrite rule...
> >
> > Things that seem to be missing:
> >
> > * What is the desired classloading for a plugin that is marked as an
> > extension? Can a plugin have a META-INF/maven/extension.xml to allow
> > exporting classes and artifacts when used as an extension? How should the
> > classloading look for such a strange beast.
> >
> > * How does one access the plugin classloader if we want TCCL to be other
> > than that, is it a Dependency Injection or something else?
> >
> > * What differentiates a Core extension from a Build extension (is it
> > that a
> > build extension lacks a META-INF/maven/extension.xml and was only
> > declared
> > in the pom.xml, while a core extension either has a
> > META-INF/maven/extension.xml - if declared in the pom - or is an
> > extension
> > declared in .mvn/extensions.xml)
> >
> > At this point in time I think we are nearing the point where I may have
> > to
> > declare 3.5.1 abandoned as I think the classloading in that is a symptom
> > of
> > too many cooks all changing things in different directions. We need a
> > consistent vision of where we want things to go and - while we need not
> > get
> > there in one go - the path presented for others to see.
> >
> > Things I think we should consider:
> >
> > 1. Do we want to formally deprecate Build Extensions and the
> > /project/build/extensions element (start logging warnings, etc)?
> > 2. Do we want to formally deprecate plugins as extensions and start
> > logging
> > warnings for
> >
> /project/build/(pluginManagement|.)/plugins/plugin/extensions[text()==true]
> > 3. What is the difference in classloading for a /project/build/extensions
> > which has a META-INF/maven/extension.xml and one that doesn't?
> >
> > I'm keeping the 3.5.1 release in staging until we get a clear vision for
> > how we want to have classloading so that I can assess whether the 3.5.1
> > actuality is only moving nearer to the vision (ok to release) or has
> > moved
> > nearer in some ways but further in others (not ok to release)
> >
> > On 20 September 2017 at 12:44, Igor Fedorenko <i...@ifedorenko.com>
> > wrote:
> >
> >> Real-world scm or wagon <extensions> won't trigger maven2-compat code
> >> path [1]. To avoid that obscure code path we can either make the test
> >> more elaborate (i.e. add dependencies to extjar1/extjar2) or we can use
> >> extensions <plugin>. Either way I don't think we should spend time on
> >> the code path unlikely to be used in real life.
> >>
> >> [1]
> >> https://github.com/apache/maven/blob/maven-3.5.1/maven-
> >>
> core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.
> >> java#L210-L219
> >>
> >> --
> >> Regards,
> >> Igor
> >>
> >> On Wed, Sep 20, 2017, at 03:29 AM, Robert Scholte wrote:
> >> > On Wed, 20 Sep 2017 09:12:47 +0200, Stephen Connolly
> >> > <stephen.alan.conno...@gmail.com> wrote:
> >> >
> >> > > On Wed 20 Sep 2017 at 01:29, Igor Fedorenko <i...@ifedorenko.com>
> >> wrote:
> >> > >
> >> > >> In that case, can I suggest couple of changes to the test project
> >> > >>
> >> > >> * I thinks it makes more sense to configure extjar1 and extjar2 as
> >> > >> extensions <plugin> elements in probleN pom.xml files. First,
> >> there is
> >> > >> no meaningful order between <extensions> and <plugins> elements.
> >> More
> >> > >> importantly, though, simple <extensions> are treated in special
> >> > >> maven2-compat mode and are not representative of likely real-world
> >> > >> extensions.
> >> > >
> >> >
> >> > Not sure I agree with this. I think there are jars worth sharing
> >> across
> >> > multiple plugins, but where making the plugin an extension is a bit
> >> > weird.
> >> > I'm thinking of scm and wagon in this case.
> >> >
> >> > >
> >> > > That sounds like we need documentation updated then. None of that is
> >> > > obvious to me.
> >> > >
> >> > >
> >> > >>
> >> > >> * I think we should introduce META-INF/maven/extension.xml to the
> >> test
> >> > >> extensions. This metadata what introduced to configure classpath
> >> > >> visibility, so lets use it.
> >> > >
> >> > >
> >> > > Again, not obvious to me, if that file allows control of classpath
> >> > > visibility then it may be that the only issue *with* 3.5.1 is the
> >> lack
> >> of
> >> > > documentation... now previous versions would have been adding
> >> breaking
> >> > > changes from my PoV but that is the past and should not affect the
> >> 3.5.1
> >> > > release.
> >> > >
> >> > > PRs for the probe project welcome. I am happy to try and write docs
> >> once
> >> > > I
> >> > > have an understanding of what the expected behaviours are
> >> > >
> >> > >
> >> > >>
> >> > >> --
> >> > >> Regards,
> >> > >> Igor
> >> > >>
> >> > >> On Tue, Sep 19, 2017, at 05:12 PM, Stephen Connolly wrote:
> >> > >> > Yes, the expectations are key. Depending on what they are we may
> >> > >> either
> >> > >> > drop 3.5.1 or go ahead as it depends on whether this is more
> >> correct
> >> > >> than
> >> > >> > 3.5.0 or swapping one fix for a bug
> >> > >> >
> >> > >> > On Tue 19 Sep 2017 at 21:39, Igor Fedorenko <i...@ifedorenko.com
> >
> >> > >> wrote:
> >> > >> >
> >> > >> > > Just to confirm I understand what we are trying to establish
> >> here.
> >> > >> We
> >> > >> > > want to decide the expected/desired component injection
> >> behaviour
> >> > >> and
> >> > >> > > classpath visibility in the absence of package and artifact
> >> export
> >> > >> > > configuration (i.e. META-INF/maven/extension.xml file). Did I
> >> get
> >> > >> this
> >> > >> > > right?
> >> > >> > >
> >> > >> > > --
> >> > >> > > Regards,
> >> > >> > > Igor
> >> > >> > >
> >> > >> > > On Tue, Sep 19, 2017, at 03:52 PM, Robert Scholte wrote:
> >> > >> > > > Let's do it like this:
> >> > >> > > >
> >> > >> > >
> >> > >> https://cwiki.apache.org/confluence/download/attachments/2329841/
> >> classrealms.pdf?api=v2
> >> > >> > > >
> >> > >> > > > Robert
> >> > >> > > >
> >> > >> > > > On Tue, 19 Sep 2017 21:08:39 +0200, Stephen Connolly
> >> > >> > > > <stephen.alan.conno...@gmail.com> wrote:
> >> > >> > > >
> >> > >> > > > > I think you will need a link to the PDF as attachments are
> >> > >> stripped
> >> > >> > > from
> >> > >> > > > > the ML
> >> > >> > > > >
> >> > >> > > > > On Tue 19 Sep 2017 at 19:57, Robert Scholte
> >> > >> <rfscho...@apache.org>
> >> > >> > > wrote:
> >> > >> > > > >
> >> > >> > > > >> Attached a single page overview.
> >> > >> > > > >>
> >> > >> > > > >> Per block you'll see in the upper left corner the executed
> >> > >> plugin
> >> > >> > > > >> The left column contains the extensions and plugin in
> >> orderas
> >> > >> > > specified
> >> > >> > > > >> in
> >> > >> > > > >> the pom.xml
> >> > >> > > > >> In every classloadercolumn you'll see numbers which
> >> represent
> >> > >> the
> >> > >> > > order.
> >> > >> > > > >>
> >> > >> > > > >> I hope I didn't make any mistakes.
> >> > >> > > > >> Tomorrow I have enough time to see if I understand what's
> >> > >> happening
> >> > >> > > > >> here.
> >> > >> > > > >>
> >> > >> > > > >> I will come back with my conclusions.
> >> > >> > > > >>
> >> > >> > > > >> Robert
> >> > >> > > > >>
> >> > >> > > > >> On Tue, 19 Sep 2017 06:55:08 +0200, Igor Fedorenko <
> >> > >> > > i...@ifedorenko.com>
> >> > >> > > > >> wrote:
> >> > >> > > > >>
> >> > >> > > > >> > TL;DR your test project exposed two existing bugs, one
> >> > >> change in
> >> > >> > > > >> > behaviour and one quirk I can't explain
> >> > >> > > > >> >
> >> > >> > > > >> > * Build `<extensions>` are loaded by two classloaders,
> >> which
> >> > >> is
> >> > >> a
> >> > >> > > bug
> >> > >> > > > >> in
> >> > >> > > > >> > DefaultProjectBuildingHelper#createProjectRealm and
> >> explains
> >> > >> why you
> >> > >> > > > >> see
> >> > >> > > > >> > extjar1/extjar2 in the output
> >> > >> > > > >> > * ClassRealm does not allow same foreign-import from
> >> multiple
> >> > >> > > > >> > classloaders, which is a bug and explains why it is not
> >> > >> possible to
> >> > >> > > > >> load
> >> > >> > > > >> > same resource from multiple plugins/extensions
> >> > >> > > > >> > * TCCL does not have access to private (i.e. not
> >> exported)
> >> > >> resources
> >> > >> > > > >> of
> >> > >> > > > >> > this extensions plugin, which is a change of behaviour
> >> > >> introduced by
> >> > >> > > > >> > mng-6209 fix
> >> > >> > > > >> > * Also, component injection order appears to be
> >> backwards,
> >> > >> but
> >> > >> maybe
> >> > >> > > > >> > Stuart can explain why.
> >> > >> > > > >> >
> >> > >> > > > >> >
> >> > >> > > > >> > Below is more detailed explanation of expected and
> >> observed
> >> > >> > > behaviour
> >> > >> > > > >> >
> >> > >> > > > >> >
> >> > >> > > > >> > ## Component injection depends on the currently running
> >> > >> plugin
> >> > >> and
> >> > >> > > the
> >> > >> > > > >> > injection site
> >> > >> > > > >> >
> >> > >> > > > >> > Currently running plugins have access to the following
> >> > >> component
> >> > >> > > > >> > implementations:
> >> > >> > > > >> >
> >> > >> > > > >> > * Regular plugin has access to components implemented by
> >> the
> >> > >> plugin,
> >> > >> > > > >> > project build extensions, if any (via project class
> >> realm
> >> > >> foreign
> >> > >> > > > >> > import) and Maven Core.
> >> > >> > > > >> > * Extension plugin has access to components implemented
> >> by
> >> > >> the
> >> > >> > > project
> >> > >> > > > >> > build extensions and Maven Core.
> >> > >> > > > >> > * Without a running plugin (e.g., during project
> >> dependency
> >> > >> > > > >> resolution),
> >> > >> > > > >> > components implemented by the project build extensions
> >> and
> >> > >> Maven
> >> > >> > > Core
> >> > >> > > > >> > are accessible.
> >> > >> > > > >> >
> >> > >> > > > >> > Different injection sites have access to the following
> >> > >> component
> >> > >> > > > >> > interfaces:
> >> > >> > > > >> >
> >> > >> > > > >> > * Maven Core has access to component interfaces defined
> >> by
> >> > >> the
> >> > >> core
> >> > >> > > > >> > itself (obviously)
> >> > >> > > > >> > * Project build extensions have access to **public**
> >> > >> component
> >> > >> > > > >> > interfaces defined by Maven Core and component
> >> interfaces
> >> > >> defined by
> >> > >> > > > >> the
> >> > >> > > > >> > build extension itself (there is no way to access
> >> component
> >> > >> > > interfaces
> >> > >> > > > >> > defined in other extensions)
> >> > >> > > > >> > * Regular plugins have access to **public** component
> >> > >> interfaces
> >> > >> > > > >> defined
> >> > >> > > > >> > by Maven Core, component interfaces **exported** by
> >> build
> >> > >> extensions
> >> > >> > > > >> and
> >> > >> > > > >> > component interfaces defined in the plugin itself
> >> > >> > > > >> >
> >> > >> > > > >> > For injection to work, injection site has to have
> >> access to
> >> > >> the
> >> > >> > > > >> > component interface and the component implementation
> >> must
> >> be
> >> > >> > > > >> accessible
> >> > >> > > > >> > through the current context.
> >> > >> > > > >> >
> >> > >> > > > >> > From what I can tell, in your example all plugins have
> >> access
> >> > >> to the
> >> > >> > > > >> > right components when using current 3.5.2-SNAPSHOT. The
> >> > >> injection
> >> > >> > > > >> order
> >> > >> > > > >> > does appear to be backwards from what I expected,
> >> however.
> >> > >> > > > >> >
> >> > >> > > > >> >
> >> > >> > > > >> > ## Resources lookup fully depends on classpath
> >> visibility,
> >> > >> > > > >> specifically
> >> > >> > > > >> >
> >> > >> > > > >> > * Regular plugin class realm has access to resources
> >> from
> >> the
> >> > >> plugin
> >> > >> > > > >> > itself, from **exported** packages of the project build
> >> > >> extensions
> >> > >> > > and
> >> > >> > > > >> > **public** Maven Core packages
> >> > >> > > > >> > * Extensions plugin class realm has access to the
> >> resources
> >> > >> from the
> >> > >> > > > >> > extensions plugin itself and from **public** Maven Core
> >> > >> packages
> >> > >> > > > >> > * Project class realm has access to classes and
> >> resources
> >> > >> > > **exported**
> >> > >> > > > >> > by project build extensions and **public** Maven Core
> >> > >> packages
> >> > >> > > > >> >
> >> > >> > > > >> > I see three problems here
> >> > >> > > > >> >
> >> > >> > > > >> > * Maven adds build single-jar `<extensions>` elements
> >> > >> directly
> >> > >> to
> >> > >> > > > >> > project class realm **and** creates separate extensions
> >> class
> >> > >> realms
> >> > >> > > > >> for
> >> > >> > > > >> > them. Which results in duplicate classes/resources
> >> loaded
> >> by
> >> > >> two
> >> > >> > > > >> > classloaders and explains why you see extjar1/extjar2
> >> output
> >> > >> (which
> >> > >> > > > >> you
> >> > >> > > > >> > shouldn't according to the explanation above)
> >> > >> > > > >> > * ClassRealm does not allow foreign-import of the same
> >> > >> package
> >> > >> from
> >> > >> > > > >> > multiple classloaders. This makes it impossible to load
> >> the
> >> > >> same
> >> > >> > > > >> > resource from multiple plugins/extensions.
> >> > >> > > > >> > * Extensions plugins cannot access their own private
> >> (i.e.
> >> > >> not
> >> > >> > > > >> exported)
> >> > >> > > > >> > resources via TCCL, this is change in behaviour
> >> introduced
> >> by
> >> > >> > > mng-6209
> >> > >> > > > >> > fix
> >> > >> > > > >> >
> >> > >> > > > >> > Hope this helps
> >> > >> > > > >>
> >> > >> > > > >>
> >> > >>
> >> ---------------------------------------------------------------------
> >> > >> > > > >> 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
> >> > >> > >
> >> > >> > > --
> >> > >> > Sent from my phone
> >> > >>
> >> > >>
> >> ---------------------------------------------------------------------
> >> > >> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> >> > >> For additional commands, e-mail: dev-h...@maven.apache.org
> >> > >>
> >> > >> --
> >> > > Sent from my phone
> >> >
> >> > ---------------------------------------------------------------------
> >> > 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
>
> --
Sent from my phone

Reply via email to