Hi Stuart, thanks a lot for the valuable input, I finalised the PR at https://github.com/eclipse/sisu.plexus/pull/22 and added some tests for path injections (as a start).
Regarding the converters being used, I already figured out that an arbitrary class with a string constructor does not work (e.g. https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html#BigInteger(java.lang.String) is not being used. IIUC this would be supported by Guice TypeConverterts. Would it make sense to also use 3 as fallback when not dealing with beans but with Mojos (treated as Plexus components)? Thanks, Konrad On 2022/07/31 09:40:27 Stuart McCulloch wrote: > 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 <[email protected]> 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 <[email protected]> > > > 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 <[email protected]> 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: [email protected] > > > > > For additional commands, e-mail: [email protected] > > > > > > > > > > > > > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [email protected] > > For additional commands, e-mail: [email protected] > > > > > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
