That's correct, Maven still uses the Plexus configuration API to convert
XML configuration to mojo parameters.

Sisu looks for the best matching converter as follows for Plexus
configuration requests:

1. custom converters registered via ConverterLookup (Plexus API)
2. built-in converters that mimic Plexus behaviour
3. built-in converters registered with Guice as TypeConverter bindings
(used when configuring beans)

By default Plexus' File converter doesn't do any base directory alignment -
but Maven registers an evaluator that provides some custom alignment rules:

https://github.com/apache/maven/blob/maven-3.8.6/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java#L461

To provide the same custom alignment for Path we just need to copy this
class and replace 'File' with 'Path':

https://github.com/eclipse/sisu.plexus/blob/releases/0.3.5/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/basic/FileConverter.java


On Sun, 31 Jul 2022 at 09:24, Konrad Windszus <k...@apache.org> wrote:

> At least for Maven 3.8.6 this is not true.
> Plexus Container API is still used in
> https://github.com/apache/maven/blob/84538c9988a25aec085021c365c560670ad80f63/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java#L625
>
> A complete stack trace for injecting File parameters in Mojos looks like
> this:
> Thread [main] (Suspended (breakpoint at line 35 in FileConverter))
>         FileConverter.fromString(String) line: 35
>
> FileConverter(AbstractBasicConverter).fromConfiguration(ConverterLookup,
> PlexusConfiguration, Class<?>, Class<?>, ClassLoader, ExpressionEvaluator,
> ConfigurationListener) line: 43
>         FileConverter.fromConfiguration(ConverterLookup,
> PlexusConfiguration, Class<?>, Class<?>, ClassLoader, ExpressionEvaluator,
> ConfigurationListener) line: 45
>         CompositeBeanHelper.convertProperty(Class<?>, Class<?>, Type,
> PlexusConfiguration) line: 273
>         CompositeBeanHelper.setProperty(Object, String, Class<?>,
> PlexusConfiguration) line: 210
>         ObjectWithFieldsConverter.processConfiguration(ConverterLookup,
> Object, ClassLoader, PlexusConfiguration, ExpressionEvaluator,
> ConfigurationListener) line: 101
>         BasicComponentConfigurator.configureComponent(Object,
> PlexusConfiguration, ExpressionEvaluator, ClassRealm,
> ConfigurationListener) line: 34
>         DefaultMavenPluginManager.populatePluginFields(Object,
> MojoDescriptor, ClassRealm, PlexusConfiguration, ExpressionEvaluator) line:
> 635
>         DefaultMavenPluginManager.getConfiguredMojo(Class<T>,
> MavenSession, MojoExecution) line: 597
>         DefaultBuildPluginManager.executeMojo(MavenSession, MojoExecution)
> line: 124
>         MojoExecutor.doExecute2(MavenSession, MojoExecution) line: 370
>         MojoExecutor.doExecute(MavenSession, MojoExecution, ProjectIndex,
> DependencyContext) line: 351
>         MojoExecutor.execute(MavenSession, MojoExecution, ProjectIndex,
> DependencyContext) line: 215
>         MojoExecutor.execute(MavenSession, MojoExecution, ProjectIndex,
> DependencyContext, PhaseRecorder) line: 171
>         MojoExecutor.execute(MavenSession, List<MojoExecution>,
> ProjectIndex) line: 163
>         LifecycleModuleBuilder.buildProject(MavenSession, MavenSession,
> ReactorContext, MavenProject, TaskSegment) line: 117
>         LifecycleModuleBuilder.buildProject(MavenSession, ReactorContext,
> MavenProject, TaskSegment) line: 81
>         SingleThreadedBuilder.build(MavenSession, ReactorContext,
> ProjectBuildList, List<TaskSegment>, ReactorBuildStatus) line: 56
>         LifecycleStarter.execute(MavenSession) line: 128
>         DefaultMaven.doExecute(MavenExecutionRequest, MavenSession,
> MavenExecutionResult, DefaultRepositorySystemSession) line: 294
>         DefaultMaven.doExecute(MavenExecutionRequest) line: 192
>         DefaultMaven.execute(MavenExecutionRequest) line: 105
>         MavenCli.execute(CliRequest) line: 960
>         MavenCli.doMain(CliRequest) line: 293
>         MavenCli.main(String[], ClassWorld) line: 196
>         NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line:
> not available [native method]
>         NativeMethodAccessorImpl.invoke(Object, Object[]) line: 62
>         DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43
>         Method.invoke(Object, Object...) line: 566
>         Launcher.launchEnhanced(String[]) line: 282
>         Launcher.launch(String[]) line: 225
>         Launcher.mainWithExitCode(String[]) line: 406
>         Launcher.main(String[]) line: 347
>
> Even in Maven 4 (
> https://github.com/apache/maven/blob/a53a1aa232bc383baf055d884a7c66319d10d404/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java#L644)
> the Plexus API is still used.
>
> So I think that sisu.plexus is really the project that needs the
> enhancement/fix.
> Is there any plan to get rid of Plexus Containers API for Maven 4?
>
> Thanks,
> Konrad
>
>
> On 2022/07/29 17:17:30 Tamás Cservenák wrote:
> > Don't mix in plexus (is dead). You need Guice spi TypeConverter.
> >
> > T
> >
> > On Fri, Jul 29, 2022, 16:22 Romain Manni-Bucau <rmannibu...@gmail.com>
> > wrote:
> >
> > > Hi Konrad,
> > >
> > > Guess what you are looking for is
> > >
> > >
> https://github.com/eclipse/sisu.plexus/blob/27a29dc633e6b03753a3c8d29a033648630c8831/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/CompositeBeanHelper.java#L250
> > > which uses
> > >
> > >
> https://github.com/eclipse/sisu.plexus/blob/27a29dc633e6b03753a3c8d29a033648630c8831/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/lookup/DefaultConverterLookup.java#L46
> > > so supporting Path is mainly about adding a PathConverter inspired from
> > > FileConverter (
> > >
> > >
> https://github.com/eclipse/sisu.plexus/blob/27a29dc633e6b03753a3c8d29a033648630c8831/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/basic/FileConverter.java#L23
> > > ).
> > >
> > > We could have a constructor or factory support like in JAX-RS or most
> CLI
> > > libraries (fromString, Parse, of etc) but not sure the actual usage so
> > > maybe just supporting the JVM types is sufficient.
> > >
> > > Hope it helps.
> > >
> > > 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 ven. 29 juil. 2022 à 16:06, Konrad Windszus <k...@apache.org> a
> écrit :
> > >
> > > > Hi,
> > > > According to
> > > >
> > >
> https://maven.apache.org/guides/plugin/guide-java-plugin-development.html#files-and-directories
> > > > only java.io.File type parameters are supported for dealing with file
> > > > paths.
> > > > I was assuming that every complex type is supported which has a
> > > > constructor taking a single String value which is used for
> > > > coercion/construction.
> > > > That is true for
> > > >
> > >
> https://docs.oracle.com/javase/7/docs/api/java/io/File.html#File(java.lang.String)
> > > > but not for
> > > > https://docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html.
> Is
> > > > there already a ticket for supporting NIO Path parameters?
> > > >
> > > > Which tool is used for doing the injection of parameters under the
> hood?
> > > > Is that also Eclipse Sisu?
> > > > It would be really nice to extend
> > > >
> > >
> https://maven.apache.org/guides/mini/guide-configuring-plugins.html#Mapping_Complex_Objects
> > > > and
> > > >
> > >
> https://maven.apache.org/guides/mini/guide-configuring-plugins.html#mapping-simple-objects
> > > > a bit, as it does not really state how the object is actually
> > > instantiated.
> > > > Is it using the default constructor and field reflection only? If
> so, how
> > > > does it do type coercion as everything given in the pom.xml or on
> the CLI
> > > > is a String?
> > > >
> > > > Thanks in advance for giving some insights on this,
> > > > 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
>
>

Reply via email to