[ https://issues.apache.org/jira/browse/MNG-8283?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17886711#comment-17886711 ]
Tamas Cservenak edited comment on MNG-8283 at 10/3/24 4:01 PM: --------------------------------------------------------------- The "Part One" PR lays down the basics and provides (some incomplete) "local", "forked" and "resident" invokers, and introduces {{mvnenc}} new CLI tool that is for password encryption management (also incomplete). was (Author: cstamas): The "Part One" PR lays down the basics and provides (some incomplete) "local", "forked" and "resident" invokers. > Maven CLIng, the "new gen" CLI > ------------------------------ > > Key: MNG-8283 > URL: https://issues.apache.org/jira/browse/MNG-8283 > Project: Maven > Issue Type: Task > Components: Command Line > Reporter: Tamas Cservenak > Assignee: Tamas Cservenak > Priority: Major > Fix For: 4.0.0, 4.0.0-beta-5 > > > Rework CLI, how Maven "boots". Currently MavenCLI is under-maintained, full > of tech debt, and blurs boundaries between arg parsing, DI booting and > invoking Maven. Hence, is not reusable, like for mvnd where a mutilated copy > of this class was needed. > MavenCLIng should alleviate all these problems. > Rationale: > New CLI for Maven. Goals are reusability, extensibility and easier > embeddability (a la mvnd). If you build this branch, you will end up with > Maven distro that uses "new" `maven-cli:org.apache.maven.cling.MavenCling` > class as entry point instead of "old" > `maven-embedder:org.apache.maven.cli.MavenCli`. > First step is to make "pretty much equivalent" capable CLI as compared to > "old", with some exceptions: > * "encryption" ops are gone, those should be in separate tool anyway > * "deprecated and unsupported" CLI options like `-llr` present ONLY to make > Maven fail are gone (now Arg parser will fail). > Current state of affairs is messy, MavenCli mixes everything it can, contains > interleaved logic for bootstrapping, arg parsing, default logic and executing > Maven. First goal is to clean this up. > Commons CLI are also hidden in this PR, so is ClassWorlds. This basically > opens up way to have "alternative" CLI arguments parsers as well. > Currently the "local" (CLI) flow is this: > {noformat} > arg[] -> localParser -> Request -> localInvoker -> maven runs (in situ) > {noformat} > But the point is if you "come up" somehow with a Request instance, one can > also do just: > {noformat} > Request -> invoker -> maven runs (somewhere) > {noformat} > Local parser: > * parses CLI args > * infers the defaults > * creates Request object that contains all information needed to run Maven > * can be reused outside of CLI as well > * does NOT fiddle with Plexus, logging, etc. > Local invoker: > * accepts Request object > * deals with configuring env (logging, etc), creating DI container, and > running Maven ONLY > There are some experiments ongoing as well, like {{ForkedInvoker}} is, we can > now make also {{Tool}} s. -- This message was sent by Atlassian Jira (v8.20.10#820010)