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 > >