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

-- 
Sent from my phone

Reply via email to