This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/master by this push:
     new 36de1c6e51 [MNG-8237] Option deprecation notices cleanup (#1713)
36de1c6e51 is described below

commit 36de1c6e512435dffe0f27e1c117bd725cfba293
Author: Guillaume Nodet <[email protected]>
AuthorDate: Thu Sep 12 06:39:22 2024 +0200

    [MNG-8237] Option deprecation notices cleanup (#1713)
---
 .../main/java/org/apache/maven/cli/CLIManager.java | 60 ++++++++++++++++------
 .../main/java/org/apache/maven/cli/MavenCli.java   | 48 +++++++++++------
 2 files changed, 76 insertions(+), 32 deletions(-)

diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java 
b/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
index 5e11454a62..7a6c3ea4e7 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
@@ -20,10 +20,12 @@ package org.apache.maven.cli;
 
 import java.io.PrintStream;
 import java.io.PrintWriter;
+import java.util.LinkedHashSet;
+import java.util.Set;
 
 import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.CommandLineParser;
 import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.DeprecatedAttributes;
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
@@ -130,11 +132,12 @@ public class CLIManager {
     public static final String IGNORE_TRANSITIVE_REPOSITORIES = "itr";
 
     /** This option is deprecated and may be repurposed as Java debug in a 
future version.
-     * Use {@code -X/--verbose} instead. */
+     * Use {@code -X,--verbose} instead. */
     @Deprecated
     public static final String DEBUG = "debug";
 
     protected Options options;
+    protected final Set<Option> usedDeprecatedOptions = new LinkedHashSet<>();
 
     @SuppressWarnings("checkstyle:MethodLength")
     public CLIManager() {
@@ -223,12 +226,6 @@ public class CLIManager {
                 .desc("Alternate path for the project settings file")
                 .hasArg()
                 .build());
-        options.addOption(Option.builder(ALTERNATE_GLOBAL_SETTINGS)
-                .longOpt("global-settings")
-                .desc("Alternate path for the global settings file")
-                .hasArg()
-                .deprecated()
-                .build());
         options.addOption(Option.builder(ALTERNATE_INSTALLATION_SETTINGS)
                 .longOpt("install-settings")
                 .desc("Alternate path for the installation settings file")
@@ -239,12 +236,6 @@ public class CLIManager {
                 .desc("Alternate path for the user toolchains file")
                 .hasArg()
                 .build());
-        options.addOption(Option.builder(ALTERNATE_GLOBAL_TOOLCHAINS)
-                .longOpt("global-toolchains")
-                .desc("Alternate path for the global toolchains file")
-                .hasArg()
-                .deprecated()
-                .build());
         options.addOption(Option.builder(ALTERNATE_INSTALLATION_TOOLCHAINS)
                 .longOpt("install-toolchains")
                 .desc("Alternate path for the installation toolchains file")
@@ -351,13 +342,42 @@ public class CLIManager {
         // Adding this back to make Maven fail if used
         options.addOption(Option.builder("llr")
                 .longOpt("legacy-local-repository")
-                .desc("UNSUPPORTED: Use of this option will make Maven 
invocation fail.")
+                .desc("<deprecated> Use Maven 2 Legacy Local Repository 
behaviour.")
+                .deprecated(DeprecatedAttributes.builder()
+                        .setSince("3.9.1")
+                        .setDescription("UNSUPPORTED: Use of this option will 
make Maven invocation fail.")
+                        .get())
                 .build());
 
         // Deprecated
         options.addOption(Option.builder()
                 .longOpt(DEBUG)
-                .desc("Produce execution verbose output (deprecated; only kept 
for backward compatibility)")
+                .desc("<deprecated> Produce execution verbose output.")
+                .deprecated(DeprecatedAttributes.builder()
+                        .setForRemoval(true)
+                        .setSince("4.0.0")
+                        .setDescription("Use -X,--verbose instead.")
+                        .get())
+                .build());
+        options.addOption(Option.builder(ALTERNATE_GLOBAL_SETTINGS)
+                .longOpt("global-settings")
+                .desc("<deprecated> Alternate path for the global settings 
file.")
+                .hasArg()
+                .deprecated(DeprecatedAttributes.builder()
+                        .setForRemoval(true)
+                        .setSince("4.0.0")
+                        .setDescription("Use -is,--install-settings instead.")
+                        .get())
+                .build());
+        options.addOption(Option.builder(ALTERNATE_GLOBAL_TOOLCHAINS)
+                .longOpt("global-toolchains")
+                .desc("<deprecated> Alternate path for the global toolchains 
file.")
+                .hasArg()
+                .deprecated(DeprecatedAttributes.builder()
+                        .setForRemoval(true)
+                        .setSince("4.0.0")
+                        .setDescription("Use -it,--install-toolchains 
instead.")
+                        .get())
                 .build());
     }
 
@@ -365,11 +385,17 @@ public class CLIManager {
         // We need to eat any quotes surrounding arguments...
         String[] cleanArgs = CleanArgument.cleanArgs(args);
 
-        CommandLineParser parser = new DefaultParser();
+        DefaultParser parser = DefaultParser.builder()
+                .setDeprecatedHandler(usedDeprecatedOptions::add)
+                .build();
 
         return parser.parse(options, cleanArgs);
     }
 
+    public Set<Option> getUsedDeprecatedOptions() {
+        return usedDeprecatedOptions;
+    }
+
     public void displayHelp(PrintStream stdout) {
         stdout.println();
 
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java 
b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
index d4acfc0f7f..28d898c6ad 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
@@ -423,17 +423,6 @@ public class MavenCli {
             cliManager.displayHelp(System.out);
             throw e;
         }
-
-        // check for presence of unsupported command line options
-        try {
-            if (cliRequest.commandLine.hasOption("llr")) {
-                throw new UnrecognizedOptionException("Option '-llr' is not 
supported starting with Maven 3.9.1");
-            }
-        } catch (ParseException e) {
-            System.err.println("Unsupported options: " + e.getMessage());
-            cliManager.displayHelp(System.out);
-            throw e;
-        }
     }
 
     private void informativeCommands(CliRequest cliRequest) throws 
ExitException {
@@ -495,7 +484,7 @@ public class MavenCli {
     /**
      * configure logging
      */
-    void logging(CliRequest cliRequest) {
+    void logging(CliRequest cliRequest) throws ExitException {
         // LOG LEVEL
         CommandLine commandLine = cliRequest.commandLine;
         cliRequest.verbose = commandLine.hasOption(CLIManager.VERBOSE) || 
commandLine.hasOption(CLIManager.DEBUG);
@@ -572,9 +561,37 @@ public class MavenCli {
             }
         }
 
-        if (commandLine.hasOption(CLIManager.DEBUG)) {
-            slf4jLogger.warn("The option '--debug' is deprecated and may be 
repurposed as Java debug"
-                    + " in a future version. Use -X/--verbose instead.");
+        // check for presence of deprecated options and print warning
+        boolean fail = false;
+        for (Option option : cliRequest.commandLine.getOptions()) {
+            if (option.isDeprecated()) {
+                StringBuilder sb = new StringBuilder();
+                sb.append("The option -").append(option.getOpt());
+                if (option.getLongOpt() != null) {
+                    sb.append(",--").append(option.getLongOpt());
+                }
+                sb.append(" is deprecated ");
+                if (option.getDeprecated().isForRemoval()) {
+                    sb.append("and will be removed in a future version");
+                }
+                if (option.getDeprecated().getSince() != null) {
+                    sb.append("since Maven 
").append(option.getDeprecated().getSince());
+                }
+                boolean error = false;
+                if (option.getDeprecated().getDescription() != null) {
+                    sb.append(": 
").append(option.getDeprecated().getDescription());
+                    error = 
option.getDeprecated().getDescription().startsWith("UNSUPPORTED:");
+                }
+                if (error) {
+                    slf4jLogger.error(sb.toString());
+                    fail = true;
+                } else {
+                    slf4jLogger.warn(sb.toString());
+                }
+            }
+        }
+        if (fail) {
+            throw new ExitException(1);
         }
     }
 
@@ -632,6 +649,7 @@ public class MavenCli {
         BasicInterpolator interpolator =
                 createInterpolator(paths, cliRequest.systemProperties, 
cliRequest.userProperties);
         CommandLine.Builder commandLineBuilder = new CommandLine.Builder();
+        commandLineBuilder.setDeprecatedHandler(o -> {});
         for (Option option : cliRequest.commandLine.getOptions()) {
             if 
(!String.valueOf(CLIManager.SET_USER_PROPERTY).equals(option.getOpt())) {
                 List<String> values = option.getValuesList();

Reply via email to