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

epugh pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/main by this push:
     new d96c6859821 SOLR-17352: Remove deprecated options from CLI (#2820)
d96c6859821 is described below

commit d96c6859821dadcd11187030684c00e6e8975480
Author: Eric Pugh <[email protected]>
AuthorDate: Fri Nov 1 13:03:11 2024 -0400

    SOLR-17352: Remove deprecated options from CLI (#2820)
    
    Options deprecated in 9x line of Solr are removed from the Solr CLI.
---
 solr/CHANGES.txt                                   |   2 +
 solr/bin/solr                                      |  47 +++---
 solr/bin/solr.cmd                                  |  45 ++----
 solr/bin/solr.in.cmd                               |   4 +-
 .../core/src/java/org/apache/solr/cli/ApiTool.java |  31 +---
 .../src/java/org/apache/solr/cli/AssertTool.java   | 162 +--------------------
 .../src/java/org/apache/solr/cli/AuthTool.java     |  61 --------
 .../src/java/org/apache/solr/cli/ClusterTool.java  |   3 +-
 .../org/apache/solr/cli/ConfigSetDownloadTool.java |  48 +-----
 .../org/apache/solr/cli/ConfigSetUploadTool.java   |  48 +-----
 .../src/java/org/apache/solr/cli/ConfigTool.java   |  41 +-----
 .../src/java/org/apache/solr/cli/CreateTool.java   |  73 +---------
 .../src/java/org/apache/solr/cli/DeleteTool.java   |  63 +-------
 .../src/java/org/apache/solr/cli/ExportTool.java   |  33 +----
 .../java/org/apache/solr/cli/HealthcheckTool.java  |   3 -
 .../java/org/apache/solr/cli/LinkConfigTool.java   |   3 +-
 .../src/java/org/apache/solr/cli/PackageTool.java  |  21 +--
 .../src/java/org/apache/solr/cli/PostLogsTool.java |  22 +--
 .../src/java/org/apache/solr/cli/PostTool.java     |  99 +------------
 .../java/org/apache/solr/cli/RunExampleTool.java   |  18 +--
 .../org/apache/solr/cli/SnapshotCreateTool.java    |   1 -
 .../org/apache/solr/cli/SnapshotDeleteTool.java    |   1 -
 .../org/apache/solr/cli/SnapshotDescribeTool.java  |   1 -
 .../org/apache/solr/cli/SnapshotExportTool.java    |  18 ---
 .../java/org/apache/solr/cli/SnapshotListTool.java |   1 -
 .../core/src/java/org/apache/solr/cli/SolrCLI.java |  96 ++----------
 .../src/java/org/apache/solr/cli/StatusTool.java   |   2 +-
 .../java/org/apache/solr/cli/UpdateACLTool.java    |   2 +-
 .../src/java/org/apache/solr/cli/ZkCpTool.java     |   6 +-
 .../src/java/org/apache/solr/cli/ZkLsTool.java     |   6 +-
 .../src/java/org/apache/solr/cli/ZkMkrootTool.java |   3 -
 .../src/java/org/apache/solr/cli/ZkMvTool.java     |   8 +-
 .../src/java/org/apache/solr/cli/ZkRmTool.java     |   6 +-
 .../test/org/apache/solr/cli/CreateToolTest.java   |   2 +-
 .../test/org/apache/solr/cli/DeleteToolTest.java   |   4 +-
 .../test/org/apache/solr/cli/PackageToolTest.java  |   2 +-
 solr/packaging/test/test_bats.bats                 |   2 +-
 solr/packaging/test/test_config.bats               |  18 +--
 solr/packaging/test/test_post.bats                 |  32 ++--
 solr/packaging/test/test_postlogs.bats             |   2 +-
 solr/packaging/test/test_prometheus.bats           |   4 +-
 solr/packaging/test/test_snapshots.bats            |   9 +-
 solr/packaging/test/test_ssl.bats                  |   3 +-
 solr/packaging/test/test_version.bats              |  18 +--
 solr/packaging/test/test_zk.bats                   |  18 +--
 solr/prometheus-exporter/bin/solr-exporter         |   8 +-
 solr/prometheus-exporter/bin/solr-exporter.cmd     |   8 +-
 .../solr/prometheus/exporter/SolrExporter.java     | 140 ++----------------
 .../deployment-guide/pages/enabling-ssl.adoc       |   6 +-
 .../monitoring-with-prometheus-and-grafana.adoc    |  16 +-
 50 files changed, 178 insertions(+), 1092 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 83327d8605b..8ed458efdb0 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -78,6 +78,8 @@ Deprecation Removals
 
 * SOLR-17494: Remove language specific writer types (i.e wt= ruby, python, 
php, and phps). (Eric Pugh)
 
+* SOLR-17352: Remove deprecated Solr CLI options.  Run bin/solr yourcommand -h 
to see current options.  (Eric Pugh, Christos Malliardis)
+
 Dependency Upgrades
 ---------------------
 (No changes)
diff --git a/solr/bin/solr b/solr/bin/solr
index d036a696400..f51011444e1 100755
--- a/solr/bin/solr
+++ b/solr/bin/solr
@@ -369,7 +369,7 @@ function print_usage() {
     echo ""
     echo "Usage: solr $CMD [-f] [--user-managed] [--host host] [-p port] 
[--server-dir directory] [-z zkHost] [-m memory] [-e example] [--solr-home 
solr.solr.home] [--data-home solr.data.home] [--jvm-opts \"jvm-opts\"] 
[--verbose]"
     echo ""
-    echo "  -f                    Start Solr in foreground; default starts 
Solr in the background"
+    echo "  -f/--foreground       Start Solr in foreground; default starts 
Solr in the background"
     echo "                          and sends stdout / stderr to 
solr-PORT-console.log"
     echo ""
     echo "  --user-managed        Start Solr in user managed aka standalone 
mode"
@@ -403,7 +403,7 @@ function print_usage() {
     echo "  --data-home <dir>     Sets the solr.data.home system property, 
where Solr will store index data in <instance_dir>/data subdirectories."
     echo "                          If not set, Solr uses solr.solr.home for 
config and data."
     echo ""
-    echo "  -e <example>          Name of the example to run; available 
examples:"
+    echo "  -e/--example <name>   Name of the example to run; available 
examples:"
     echo "      cloud:              SolrCloud example"
     echo "      techproducts:       Comprehensive example illustrating many of 
Solr's core capabilities"
     echo "      schemaless:         Schema-less example (schema is inferred 
from data during indexing)"
@@ -419,7 +419,7 @@ function print_usage() {
     echo "                          you could pass: -j 
\"--include-jetty-dir=/etc/jetty/custom/server/\""
     echo "                          In most cases, you should wrap the 
additional parameters in double quotes."
     echo ""
-    echo "  --no-prompt            Don't prompt for input; accept all defaults 
when running examples that accept user input"
+    echo "  -y/--no-prompt        Don't prompt for input; accept all defaults 
when running examples that accept user input"
     echo ""
     echo "  --force               If attempting to start Solr as the root 
user, the script will exit with a warning that running Solr as \"root\" can 
cause problems."
     echo "                          It is possible to override this warning 
with the '--force' parameter."
@@ -574,7 +574,7 @@ function stop_solr() {
 
 if [ $# -eq 1 ]; then
   case $1 in
-    --help|-h|-help)
+    --help|-h)
         run_tool ""
         exit
     ;;
@@ -694,7 +694,7 @@ if [ $# -gt 0 ]; then
             PASS_TO_RUN_EXAMPLE+=("--user-managed")
             shift
         ;;
-        -d|--dir|-dir|--server-dir)
+        --server-dir)
             if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
               print_usage "$SCRIPT_CMD" "Server directory is required when 
using the $1 option!"
               exit 1
@@ -714,7 +714,7 @@ if [ $# -gt 0 ]; then
             SOLR_SERVER_DIR="$(cd "$SOLR_SERVER_DIR" || (echo "SOLR_SERVER_DIR 
not found" && exit 1); pwd)"
             shift 2
         ;;
-        -s|--solr-home|-solr.home)
+        --solr-home)
             if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
               print_usage "$SCRIPT_CMD" "Solr home directory is required when 
using the $1 option!"
               exit 1
@@ -723,11 +723,15 @@ if [ $# -gt 0 ]; then
             SOLR_HOME="$2"
             shift 2
         ;;
-        -t|--data-home|-data.home)
+        --data-home)
+            if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+              print_usage "$SCRIPT_CMD" "Data home directory is required when 
using the $1 option!"
+              exit 1
+            fi        
             SOLR_DATA_HOME="$2"
             shift 2
         ;;
-        -e|--example|-example)
+        -e|--example)
             if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
               print_usage "$SCRIPT_CMD" "Example name is required when using 
the $1 option!"
               exit 1
@@ -735,11 +739,11 @@ if [ $# -gt 0 ]; then
             EXAMPLE="$2"
             shift 2
         ;;
-        -f|--foreground|-foreground)
+        -f|--foreground)
             FG="true"
             shift
         ;;
-        --host|-host)
+        --host)
             if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
               print_usage "$SCRIPT_CMD" "Hostname is required when using the 
$1 option!"
               exit 1
@@ -748,7 +752,7 @@ if [ $# -gt 0 ]; then
             PASS_TO_RUN_EXAMPLE+=("--host" "$SOLR_HOST")
             shift 2
         ;;
-        -m|--memory|-memory)
+        -m|--memory)
             if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
               print_usage "$SCRIPT_CMD" "Memory setting is required when using 
the $1 option!"
               exit 1
@@ -757,7 +761,7 @@ if [ $# -gt 0 ]; then
             PASS_TO_RUN_EXAMPLE+=("-m" "$SOLR_HEAP")
             shift 2
         ;;
-        -p|--port|-port)
+        -p|--port)
             if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
               print_usage "$SCRIPT_CMD" "Port number is required when using 
the $1 option!"
               exit 1
@@ -767,7 +771,7 @@ if [ $# -gt 0 ]; then
             PASS_TO_RUN_EXAMPLE+=("-p" "$SOLR_PORT")
             shift 2
         ;;
-        -z|--zk-host|-zkHost|--zkHost)
+        -z|--zk-host)
             if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
               print_usage "$SCRIPT_CMD" "Zookeeper connection string is 
required when using the $1 option!"
               exit 1
@@ -776,7 +780,7 @@ if [ $# -gt 0 ]; then
             PASS_TO_RUN_EXAMPLE+=("-z" "$ZK_HOST")
             shift 2
         ;;
-        -a|--jvm-opts|-addlopts)
+        --jvm-opts)
             if [[ -z "$2" ]]; then
               print_usage "$SCRIPT_CMD" "JVM options are required when using 
the $1 option!"
               exit 1
@@ -785,16 +789,15 @@ if [ $# -gt 0 ]; then
             PASS_TO_RUN_EXAMPLE+=("--jvm-opts" "$ADDITIONAL_CMD_OPTS")
             shift 2
         ;;
-        -j|--jettyconfig|-jettyconfig)
+        -j|--jettyconfig)
             if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
               print_usage "$SCRIPT_CMD" "Jetty config is required when using 
the $1 option!"
               exit 1
             fi
             ADDITIONAL_JETTY_CONFIG="$2"
-            PASS_TO_RUN_EXAMPLE+=("-j" "$ADDITIONAL_JETTY_CONFIG")
             shift 2
         ;;
-        -k|--key|-key)
+        -k|--key)
             if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
               print_usage "$SCRIPT_CMD" "Stop key is required when using the 
$1 option!"
               exit 1
@@ -802,15 +805,15 @@ if [ $# -gt 0 ]; then
             STOP_KEY="$2"
             shift 2
         ;;
-        -h|--help|-help)
+        -h|--help)
             print_usage "$SCRIPT_CMD"
             exit 0
         ;;
-        --noprompt|-noprompt|--no-prompt)
+        -y|--no-prompt)
             PASS_TO_RUN_EXAMPLE+=("--no-prompt")
             shift
         ;;
-        -V|--verbose|-verbose|-v)
+        --verbose)
             verbose=true
             SOLR_LOG_LEVEL=DEBUG
             PASS_TO_RUN_EXAMPLE+=("--verbose")
@@ -820,11 +823,11 @@ if [ $# -gt 0 ]; then
             SOLR_LOG_LEVEL=WARN
             shift
         ;;
-        --all|-all)
+        --all)
             stop_all=true
             shift
         ;;
-        --force|-force)
+        --force)
             FORCE=true
             PASS_TO_RUN_EXAMPLE+=("--force")
             shift
diff --git a/solr/bin/solr.cmd b/solr/bin/solr.cmd
index ce6f2aea386..783a4feed00 100755
--- a/solr/bin/solr.cmd
+++ b/solr/bin/solr.cmd
@@ -248,17 +248,12 @@ set FIRST_ARG=%1
 
 IF [%1]==[] goto usage
 
-REM -help is a special case to faciliate folks learning about how to use Solr.
-IF "%1"=="-help" goto run_solrcli
-IF "%1"=="-usage" goto run_solrcli
 IF "%1"=="-h" goto run_solrcli
 IF "%1"=="--help" goto run_solrcli
-IF "%1"=="-help" goto run_solrcli
-IF "%1"=="/?" goto run_solrcli
 IF "%1"=="status" goto run_solrcli
 IF "%1"=="version" goto run_solrcli
 IF "%1"=="-v" goto run_solrcli
-IF "%1"=="-version" goto run_solrcli
+IF "%1"=="--version" goto run_solrcli
 IF "%1"=="assert" goto run_solrcli
 IF "%1"=="zk" goto run_solrcli
 IF "%1"=="export" goto run_solrcli
@@ -287,11 +282,8 @@ goto parse_args
 :usage
 IF NOT "%SCRIPT_ERROR%"=="" ECHO %SCRIPT_ERROR%
 IF [%FIRST_ARG%]==[] goto run_solrcli
-IF "%FIRST_ARG%"=="-help" goto run_solrcli
-IF "%FIRST_ARG%"=="-usage" goto run_solrcli
 IF "%FIRST_ARG%"=="-h" goto run_solrcli
 IF "%FIRST_ARG%"=="--help" goto run_solrcli
-IF "%FIRST_ARG%"=="/?" goto run_solrcli
 IF "%SCRIPT_CMD%"=="start" goto start_usage
 IF "%SCRIPT_CMD%"=="restart" goto start_usage
 IF "%SCRIPT_CMD%"=="stop" goto stop_usage
@@ -310,7 +302,7 @@ goto done
 @echo.
 @echo Usage: solr %SCRIPT_CMD% [-f] [--user-managed] [--host hostname] [-p 
port] [--server-dir directory] [-z zkHost] [-m memory] [-e example] 
[--solr-home solr.solr.home] [--data-home solr.data.home] [--jvm-opts 
"jvm-opts"] [--verbose]
 @echo.
-@echo   -f            Start Solr in foreground; default starts Solr in the 
background
+@echo   -f/--foreground Start Solr in foreground; default starts Solr in the 
background
 @echo                   and sends stdout / stderr to solr-PORT-console.log
 @echo.
 @echo   --user-managed Start Solr in user managed aka standalone mode"
@@ -318,7 +310,7 @@ goto done
 @echo.
 @echo   --host host   Specify the hostname for this Solr instance
 @echo.
-@echo   -p port       Specify the port to start the Solr HTTP listener on; 
default is 8983
+@echo   -p/--port port Specify the port to start the Solr HTTP listener on; 
default is 8983
 @echo                   The specified port (SOLR_PORT) will also be used to 
determine the stop port
 @echo                   STOP_PORT=(%%SOLR_PORT%%-1000) and JMX RMI listen port 
RMI_PORT=(%%SOLR_PORT%%+10000).
 @echo                   For instance, if you set -p 8985, then the 
STOP_PORT=7985 and RMI_PORT=18985
@@ -330,10 +322,10 @@ goto done
 @echo                   an embedded ZooKeeper instance will be launched.
 @echo                   Set the ZK_CREATE_CHROOT environment variable to true 
if your ZK host has a chroot path, and you want to create it automatically."
 @echo.
-@echo   -m memory     Sets the min (-Xms) and max (-Xmx) heap size for the 
JVM, such as: -m 4g
+@echo   -m/--memory memory Sets the min (-Xms) and max (-Xmx) heap size for 
the JVM, such as: -m 4g
 @echo                   results in: -Xms4g -Xmx4g; by default, this script 
sets the heap size to 512m
 @echo.
-@echo   --solr.home dir  Sets the solr.solr.home system property; Solr will 
create core directories under
+@echo   --solr-home dir  Sets the solr.solr.home system property; Solr will 
create core directories under
 @echo                   this directory. This allows you to run multiple Solr 
instances on the same host
 @echo                   while reusing the same server directory set using the 
--server-dir parameter. If set, the
 @echo                   specified directory should contain a solr.xml file, 
unless solr.xml exists in Zookeeper.
@@ -344,7 +336,7 @@ goto done
 @echo   --data-home dir Sets the solr.data.home system property, where Solr 
will store index data in ^<instance_dir^>/data subdirectories.
 @echo                   If not set, Solr uses solr.solr.home for both config 
and data.
 @echo.
-@echo   -e example    Name of the example to run; available examples:
+@echo   -e/--example name Name of the example to run; available examples:
 @echo       cloud:          SolrCloud example
 @echo       techproducts:   Comprehensive example illustrating many of Solr's 
core capabilities
 @echo       schemaless:     Schema-less example (schema is inferred from data 
during indexing)
@@ -360,7 +352,7 @@ goto done
 @echo                 you could pass: -j 
"--include-jetty-dir=/etc/jetty/custom/server/"
 @echo                 In most cases, you should wrap the additional parameters 
in double quotes.
 @echo.
-@echo   --no-prompt   Don't prompt for input; accept all defaults when running 
examples that accept user input
+@echo   -y/--no-prompt Don't prompt for input; accept all defaults when 
running examples that accept user input
 @echo.
 @echo   --verbose and -q/--quiet Verbose or quiet logging. Sets default log 
level to DEBUG or WARN instead of INFO
 @echo.
@@ -390,25 +382,16 @@ set "arg=%~1"
 set "firstTwo=%arg:~0,2%"
 IF "%SCRIPT_CMD%"=="" set SCRIPT_CMD=start
 IF [%1]==[] goto process_script_cmd
-IF "%1"=="-help" goto usage
+IF "%1"=="--help" goto usage
 IF "%1"=="-h" goto usage
-IF "%1"=="-usage" goto usage
-IF "%1"=="/?" goto usage
 IF "%1"=="-f" goto set_foreground_mode
 IF "%1"=="--foreground" goto set_foreground_mode
-IF "%1"=="-V" goto set_verbose
 IF "%1"=="--verbose" goto set_verbose
-IF "%1"=="-v" goto set_verbose
 IF "%1"=="-q" goto set_warn
 IF "%1"=="--quiet" goto set_warn
 IF "%1"=="--user-managed" goto set_user_managed_mode
-IF "%1"=="-d" goto set_server_dir
-IF "%1"=="--dir" goto set_server_dir
 IF "%1"=="--server-dir" goto set_server_dir
-IF "%1"=="-s" goto set_solr_home_dir
 IF "%1"=="--solr-home" goto set_solr_home_dir
-IF "%1"=="-t" goto set_solr_data_dir
-IF "%1"=="--solr-data" goto set_solr_data_dir
 IF "%1"=="--data-home" goto set_solr_data_dir
 IF "%1"=="-e" goto set_example
 IF "%1"=="--example" goto set_example
@@ -419,21 +402,16 @@ IF "%1"=="-p" goto set_port
 IF "%1"=="--port" goto set_port
 IF "%1"=="-z" goto set_zookeeper
 IF "%1"=="--zk-host" goto set_zookeeper
-IF "%1"=="-zkHost" goto set_zookeeper
-IF "%1"=="--zkHost" goto set_zookeeper
 IF "%1"=="-s" goto set_solr_url
 IF "%1"=="--solr-url" goto set_solr_url
-IF "%1"=="-solrUrl" goto set_solr_url
-IF "%1"=="-a" goto set_jvm_opts
 IF "%1"=="--jvm-opts" goto set_jvm_opts
 IF "%1"=="-j" goto set_addl_jetty_config
 IF "%1"=="--jettyconfig" goto set_addl_jetty_config
-IF "%1"=="--noprompt" goto set_noprompt
 IF "%1"=="--no-prompt" goto set_noprompt
+IF "%1"=="-y" goto set_noprompt
 IF "%1"=="-k" goto set_stop_key
 IF "%1"=="--key" goto set_stop_key
 IF "%1"=="--all" goto set_stop_all
-IF "%1"=="-all" goto set_stop_all
 IF "%firstTwo%"=="-D" goto set_passthru
 IF NOT "%1"=="" goto invalid_cmd_line
 goto invalid_cmd_line
@@ -1180,10 +1158,7 @@ goto done
 IF [%1]==[] goto run_config
 IF "%1"=="-z" goto set_config_zk
 IF "%1"=="--zk-host" goto set_config_zk
-IF "%1"=="-zkHost" goto set_config_zk
-IF "%1"=="--zkHost" goto set_config_zk
-IF "%1"=="-s" goto set_config_url_scheme
-IF "%1"=="-scheme" goto set_config_url_scheme
+IF "%1"=="--scheme" goto set_config_url_scheme
 set "CONFIG_ARGS=!CONFIG_ARGS! %1"
 SHIFT
 goto parse_config_args
diff --git a/solr/bin/solr.in.cmd b/solr/bin/solr.in.cmd
index 9c2d9822eb2..ac058eae131 100755
--- a/solr/bin/solr.in.cmd
+++ b/solr/bin/solr.in.cmd
@@ -90,7 +90,7 @@ REM set RMI_PORT=18983
 
 REM Anything you add to the SOLR_OPTS variable will be included in the java
 REM start command line as-is, in ADDITION to other options. If you specify the
-REM -a option on start script, those options will be appended as well. 
Examples:
+REM --jvm-opts option on start script, those options will be appended as well. 
Examples:
 REM set SOLR_OPTS=%SOLR_OPTS% -Dsolr.autoSoftCommit.maxTime=3000
 REM set SOLR_OPTS=%SOLR_OPTS% -Dsolr.autoCommit.maxTime=60000
 
@@ -255,4 +255,4 @@ REM set SOLR_MODULES=extraction,ltr
 
 REM Configure the default replica placement plugin to use if one is not 
configured in cluster properties
 REM See 
https://solr.apache.org/guide/solr/latest/configuration-guide/replica-placement-plugins.html
 for details
-REM set SOLR_PLACEMENTPLUGIN_DEFAULT=simple
\ No newline at end of file
+REM set SOLR_PLACEMENTPLUGIN_DEFAULT=simple
diff --git a/solr/core/src/java/org/apache/solr/cli/ApiTool.java 
b/solr/core/src/java/org/apache/solr/cli/ApiTool.java
index 76c6aa6f60f..e9af6116fa9 100644
--- a/solr/core/src/java/org/apache/solr/cli/ApiTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/ApiTool.java
@@ -21,7 +21,6 @@ import java.io.PrintStream;
 import java.net.URI;
 import java.util.List;
 import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.DeprecatedAttributes;
 import org.apache.commons.cli.Option;
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.impl.JsonMapResponseParser;
@@ -57,20 +56,7 @@ public class ApiTool extends ToolBase {
             .longOpt("solr-url")
             .argName("URL")
             .hasArg()
-            .required(false) // swap back to required when we eliminate 
deprecated option
-            .desc("Send a GET request to a Solr API endpoint.")
-            .build(),
-        Option.builder("get")
-            .longOpt("get")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.7")
-                    .setDescription("Use --solr-url instead")
-                    .get())
-            .argName("URL")
-            .hasArg()
-            .required(false)
+            .required(true)
             .desc("Send a GET request to a Solr API endpoint.")
             .build(),
         SolrCLI.OPTION_CREDENTIALS);
@@ -78,16 +64,11 @@ public class ApiTool extends ToolBase {
 
   @Override
   public void runImpl(CommandLine cli) throws Exception {
-    String response = null;
-    String getUrl =
-        cli.hasOption("solr-url") ? cli.getOptionValue("solr-url") : 
cli.getOptionValue("get");
-    if (getUrl != null) {
-      response = callGet(getUrl, 
cli.getOptionValue(SolrCLI.OPTION_CREDENTIALS.getLongOpt()));
-    }
-    if (response != null) {
-      // pretty-print the response to stdout
-      echo(response);
-    }
+    String getUrl = cli.getOptionValue("solr-url");
+    String response = callGet(getUrl, 
cli.getOptionValue(SolrCLI.OPTION_CREDENTIALS.getLongOpt()));
+
+    // pretty-print the response to stdout
+    echo(response);
   }
 
   protected String callGet(String url, String credentials) throws Exception {
diff --git a/solr/core/src/java/org/apache/solr/cli/AssertTool.java 
b/solr/core/src/java/org/apache/solr/cli/AssertTool.java
index 5f5d27c3ee0..966e7993146 100644
--- a/solr/core/src/java/org/apache/solr/cli/AssertTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/AssertTool.java
@@ -26,7 +26,6 @@ import java.nio.file.attribute.FileOwnerAttributeView;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.DeprecatedAttributes;
 import org.apache.commons.cli.Option;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrServerException;
@@ -61,54 +60,14 @@ public class AssertTool extends ToolBase {
   @Override
   public List<Option> getOptions() {
     return List.of(
-        Option.builder("R")
-            .desc("Asserts that we are NOT the root user.")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --not-root instead")
-                    .get())
-            .build(),
         Option.builder().desc("Asserts that we are NOT the root 
user.").longOpt("not-root").build(),
-        Option.builder("r")
-            .desc("Asserts that we are the root user.")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --root instead")
-                    .get())
-            .build(),
         Option.builder().desc("Asserts that we are the root 
user.").longOpt("root").build(),
-        Option.builder("S")
-            .desc("Asserts that Solr is NOT running on a certain URL. Default 
timeout is 1000ms.")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --not-started instead")
-                    .get())
-            .hasArg(true)
-            .argName("url")
-            .build(),
         Option.builder()
             .desc("Asserts that Solr is NOT running on a certain URL. Default 
timeout is 1000ms.")
             .longOpt("not-started")
             .hasArg(true)
             .argName("url")
             .build(),
-        Option.builder("s")
-            .desc("Asserts that Solr is running on a certain URL. Default 
timeout is 1000ms.")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --started instead")
-                    .get())
-            .hasArg(true)
-            .argName("url")
-            .build(),
         Option.builder()
             .desc("Asserts that Solr is running on a certain URL. Default 
timeout is 1000ms.")
             .longOpt("started")
@@ -121,52 +80,18 @@ public class AssertTool extends ToolBase {
             .hasArg(true)
             .argName("directory")
             .build(),
-        Option.builder("x")
-            .desc("Asserts that directory <directory> exists.")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --exists instead")
-                    .get())
-            .hasArg(true)
-            .argName("directory")
-            .build(),
         Option.builder()
             .desc("Asserts that directory <directory> exists.")
             .longOpt("exists")
             .hasArg(true)
             .argName("directory")
             .build(),
-        Option.builder("X")
-            .desc("Asserts that directory <directory> does NOT exist.")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --not-exists instead")
-                    .get())
-            .hasArg(true)
-            .argName("directory")
-            .build(),
         Option.builder()
             .desc("Asserts that directory <directory> does NOT exist.")
             .longOpt("not-exists")
             .hasArg(true)
             .argName("directory")
             .build(),
-        Option.builder("c")
-            .desc(
-                "Asserts that Solr is running in cloud mode.  Also fails if 
Solr not running.  URL should be for root Solr path.")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --cloud instead")
-                    .get())
-            .hasArg(true)
-            .argName("url")
-            .build(),
         Option.builder()
             .desc(
                 "Asserts that Solr is running in cloud mode.  Also fails if 
Solr not running.  URL should be for root Solr path.")
@@ -174,18 +99,6 @@ public class AssertTool extends ToolBase {
             .hasArg(true)
             .argName("url")
             .build(),
-        Option.builder("C")
-            .desc(
-                "Asserts that Solr is not running in cloud mode.  Also fails 
if Solr not running.  URL should be for root Solr path.")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --not-cloud instead")
-                    .get())
-            .hasArg(true)
-            .argName("url")
-            .build(),
         Option.builder()
             .desc(
                 "Asserts that Solr is not running in cloud mode.  Also fails 
if Solr not running.  URL should be for root Solr path.")
@@ -193,35 +106,12 @@ public class AssertTool extends ToolBase {
             .hasArg(true)
             .argName("url")
             .build(),
-        Option.builder("m")
-            .desc("Exception message to be used in place of the default error 
message.")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --message instead")
-                    .get())
-            .hasArg(true)
-            .argName("message")
-            .build(),
         Option.builder()
             .desc("Exception message to be used in place of the default error 
message.")
             .longOpt("message")
             .hasArg(true)
             .argName("message")
             .build(),
-        Option.builder("t")
-            .desc("Timeout in ms for commands supporting a timeout.")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --timeout instead")
-                    .get())
-            .hasArg(true)
-            .type(Long.class)
-            .argName("ms")
-            .build(),
         Option.builder()
             .desc("Timeout in ms for commands supporting a timeout.")
             .longOpt("timeout")
@@ -229,15 +119,6 @@ public class AssertTool extends ToolBase {
             .type(Long.class)
             .argName("ms")
             .build(),
-        Option.builder("e")
-            .desc("Return an exit code instead of printing error message on 
assert fail.")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --exitcode instead")
-                    .get())
-            .build(),
         Option.builder()
             .desc("Return an exit code instead of printing error message on 
assert fail.")
             .longOpt("exitcode")
@@ -250,7 +131,7 @@ public class AssertTool extends ToolBase {
    * Otherwise, very similar to the parent runTool method.
    *
    * @param cli the command line object
-   * @return 0 on success, or a number corresponding to number of tests that 
failed, or 100 for a
+   * @return 0 on success, or a number corresponding to number of tests that 
failed, or 100 for an
    *     Error
    * @throws Exception if a tool failed, e.g. authentication failure
    */
@@ -297,82 +178,47 @@ public class AssertTool extends ToolBase {
     if (cli.hasOption("message")) {
       message = cli.getOptionValue("message");
     }
-    if (cli.hasOption("t")) {
-      timeoutMs = Long.parseLong(cli.getOptionValue("t"));
-    }
     if (cli.hasOption("timeout")) {
-      timeoutMs = Long.parseLong(cli.getOptionValue("timeout"));
-    }
-    if (cli.hasOption("e")) {
-      useExitCode = true;
+      timeoutMs = cli.getParsedOptionValue("timeout");
     }
     if (cli.hasOption("exitcode")) {
       useExitCode = true;
     }
 
     int ret = 0;
-    if (cli.hasOption("root") || cli.hasOption("r")) {
+    if (cli.hasOption("root")) {
       ret += assertRootUser();
     }
-    if (cli.hasOption("not-root") || cli.hasOption("R")) {
+    if (cli.hasOption("not-root")) {
       ret += assertNotRootUser();
     }
-    if (cli.hasOption("x")) {
-      ret += assertFileExists(cli.getOptionValue("x"));
-    }
     if (cli.hasOption("exists")) {
       ret += assertFileExists(cli.getOptionValue("exists"));
     }
-    if (cli.hasOption("X")) {
-      ret += assertFileNotExists(cli.getOptionValue("X"));
-    }
     if (cli.hasOption("not-exists")) {
       ret += assertFileNotExists(cli.getOptionValue("not-exists"));
     }
     if (cli.hasOption("same-user")) {
       ret += sameUser(cli.getOptionValue("same-user"));
     }
-    if (cli.hasOption("s")) {
-      ret +=
-          assertSolrRunning(
-              cli.getOptionValue("s"), 
cli.getOptionValue(SolrCLI.OPTION_CREDENTIALS.getLongOpt()));
-    }
     if (cli.hasOption("started")) {
       ret +=
           assertSolrRunning(
               cli.getOptionValue("started"),
               cli.getOptionValue(SolrCLI.OPTION_CREDENTIALS.getLongOpt()));
     }
-    if (cli.hasOption("S")) {
-      ret +=
-          assertSolrNotRunning(
-              SolrCLI.getOptionWithDeprecatedAndDefault(cli, "not-started", 
"S", null),
-              cli.getOptionValue(SolrCLI.OPTION_CREDENTIALS.getLongOpt()));
-    }
     if (cli.hasOption("not-started")) {
       ret +=
           assertSolrNotRunning(
               cli.getOptionValue("not-started"),
               cli.getOptionValue(SolrCLI.OPTION_CREDENTIALS.getLongOpt()));
     }
-    if (cli.hasOption("c")) {
-      ret +=
-          assertSolrRunningInCloudMode(
-              SolrCLI.normalizeSolrUrl(cli.getOptionValue("c")),
-              cli.getOptionValue(SolrCLI.OPTION_CREDENTIALS.getLongOpt()));
-    }
     if (cli.hasOption("cloud")) {
       ret +=
           assertSolrRunningInCloudMode(
               SolrCLI.normalizeSolrUrl(cli.getOptionValue("cloud")),
               cli.getOptionValue(SolrCLI.OPTION_CREDENTIALS.getLongOpt()));
     }
-    if (cli.hasOption("C")) {
-      ret +=
-          assertSolrNotRunningInCloudMode(
-              SolrCLI.normalizeSolrUrl(cli.getOptionValue("C")),
-              cli.getOptionValue(SolrCLI.OPTION_CREDENTIALS.getLongOpt()));
-    }
     if (cli.hasOption("not-cloud")) {
       ret +=
           assertSolrNotRunningInCloudMode(
diff --git a/solr/core/src/java/org/apache/solr/cli/AuthTool.java 
b/solr/core/src/java/org/apache/solr/cli/AuthTool.java
index 6000e1e8667..bc091073170 100644
--- a/solr/core/src/java/org/apache/solr/cli/AuthTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/AuthTool.java
@@ -35,7 +35,6 @@ import java.util.List;
 import java.util.Locale;
 import java.util.stream.Collectors;
 import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.DeprecatedAttributes;
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Option;
 import org.apache.lucene.util.Constants;
@@ -112,20 +111,6 @@ public class AuthTool extends ToolBase {
             .hasArg()
             .argName("true|false")
             .build(),
-        Option.builder("blockUnknown")
-            .longOpt("blockUnknown")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --block-unknown instead")
-                    .get())
-            .hasArg()
-            .argName("true|false")
-            .required(false)
-            .desc(
-                "Blocks all access for unknown users (requires authentication 
for all endpoints).")
-            .build(),
         Option.builder()
             .longOpt("solr-include-file")
             .hasArg()
@@ -133,20 +118,6 @@ public class AuthTool extends ToolBase {
             .desc(
                 "The Solr include file which contains overridable environment 
variables for configuring Solr configurations.")
             .build(),
-        Option.builder("solrIncludeFile")
-            .longOpt("solrIncludeFile")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.7")
-                    .setDescription("Use --solr-include-file instead")
-                    .get())
-            .hasArg()
-            .argName("FILE")
-            .required(false)
-            .desc(
-                "The Solr include file which contains overridable environment 
variables for configuring Solr configurations.")
-            .build(),
         Option.builder()
             .longOpt("update-include-file-only")
             .desc(
@@ -154,21 +125,6 @@ public class AuthTool extends ToolBase {
                     + " authentication (i.e. don't update security.json).")
             .hasArg()
             .build(),
-        Option.builder()
-            .longOpt("updateIncludeFileOnly")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --update-include-file-only instead")
-                    .get())
-            .hasArg()
-            .argName("true|false")
-            .required(false)
-            .desc(
-                "Only update the solr.in.sh or solr.in.cmd file, and skip 
actual enabling/disabling"
-                    + " authentication (i.e. don't update security.json).")
-            .build(),
         Option.builder()
             .longOpt("auth-conf-dir")
             .hasArg()
@@ -177,25 +133,8 @@ public class AuthTool extends ToolBase {
             .desc(
                 "This is where any authentication related configuration files, 
if any, would be placed.")
             .build(),
-        Option.builder("solrIncludeFile")
-            .longOpt("solrIncludeFile")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.7")
-                    .setDescription("Use --solr-include-file instead")
-                    .get())
-            .hasArg()
-            .argName("FILE")
-            .required(false)
-            .desc(
-                "The Solr include file which contains overridable environment 
variables for configuring Solr configurations.")
-            .build(),
         SolrCLI.OPTION_SOLRURL,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED_SHORT,
         SolrCLI.OPTION_ZKHOST,
-        SolrCLI.OPTION_ZKHOST_DEPRECATED,
         SolrCLI.OPTION_CREDENTIALS);
   }
 
diff --git a/solr/core/src/java/org/apache/solr/cli/ClusterTool.java 
b/solr/core/src/java/org/apache/solr/cli/ClusterTool.java
index 23300bc8800..8b6bd17f56b 100644
--- a/solr/core/src/java/org/apache/solr/cli/ClusterTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/ClusterTool.java
@@ -66,8 +66,7 @@ public class ClusterTool extends ToolBase {
             .required(false)
             .desc("Set the property to this value.")
             .build(),
-        SolrCLI.OPTION_ZKHOST,
-        SolrCLI.OPTION_ZKHOST_DEPRECATED);
+        SolrCLI.OPTION_ZKHOST);
   }
 
   @Override
diff --git a/solr/core/src/java/org/apache/solr/cli/ConfigSetDownloadTool.java 
b/solr/core/src/java/org/apache/solr/cli/ConfigSetDownloadTool.java
index 2a987b7bdce..b0e5aaa6d4a 100644
--- a/solr/core/src/java/org/apache/solr/cli/ConfigSetDownloadTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/ConfigSetDownloadTool.java
@@ -23,7 +23,6 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.List;
 import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.DeprecatedAttributes;
 import org.apache.commons.cli.Option;
 import org.apache.solr.common.cloud.SolrZkClient;
 import org.slf4j.Logger;
@@ -48,47 +47,18 @@ public class ConfigSetDownloadTool extends ToolBase {
             .longOpt("conf-name")
             .hasArg()
             .argName("NAME")
-            .required(false) // should be true, but we have deprecated option 
as well.
-            .desc("Configset name in ZooKeeper.")
-            .build(),
-        Option.builder()
-            .longOpt("confname")
-            .hasArg()
-            .argName("NAME")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --conf-name instead")
-                    .get())
-            .required(false)
+            .required(true)
             .desc("Configset name in ZooKeeper.")
             .build(),
         Option.builder("d")
             .longOpt("conf-dir")
             .hasArg()
             .argName("DIR")
-            .required(false) // should be true, but we have deprecated option 
as well.
-            .desc("Local directory with configs.")
-            .build(),
-        Option.builder()
-            .longOpt("confdir")
-            .hasArg()
-            .argName("NAME")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --conf-dir instead")
-                    .get())
-            .required(false)
+            .required(true)
             .desc("Local directory with configs.")
             .build(),
         SolrCLI.OPTION_SOLRURL,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED_SHORT,
         SolrCLI.OPTION_ZKHOST,
-        SolrCLI.OPTION_ZKHOST_DEPRECATED,
         SolrCLI.OPTION_CREDENTIALS);
   }
 
@@ -107,17 +77,11 @@ public class ConfigSetDownloadTool extends ToolBase {
     SolrCLI.raiseLogLevelUnlessVerbose(cli);
     String zkHost = SolrCLI.getZkHost(cli);
 
-    try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost)) {
-      echoIfVerbose("\nConnecting to ZooKeeper at " + zkHost + " ...");
-      String confName =
-          cli.hasOption("conf-name")
-              ? cli.getOptionValue("conf-name")
-              : cli.getOptionValue("confname");
-      String confDir =
-          cli.hasOption("conf-dir")
-              ? cli.getOptionValue("conf-dir")
-              : cli.getOptionValue("confdir");
+    String confName = cli.getOptionValue("conf-name");
+    String confDir = cli.getOptionValue("conf-dir");
 
+    echoIfVerbose("\nConnecting to ZooKeeper at " + zkHost + " ...");
+    try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost)) {
       Path configSetPath = Paths.get(confDir);
       // we try to be nice about having the "conf" in the directory, and we 
create it if it's not
       // there.
diff --git a/solr/core/src/java/org/apache/solr/cli/ConfigSetUploadTool.java 
b/solr/core/src/java/org/apache/solr/cli/ConfigSetUploadTool.java
index 3799b498c4e..597b901c7d0 100644
--- a/solr/core/src/java/org/apache/solr/cli/ConfigSetUploadTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/ConfigSetUploadTool.java
@@ -22,7 +22,6 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.List;
 import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.DeprecatedAttributes;
 import org.apache.commons.cli.Option;
 import org.apache.solr.common.cloud.SolrZkClient;
 import org.apache.solr.common.cloud.ZkMaintenanceUtils;
@@ -50,47 +49,18 @@ public class ConfigSetUploadTool extends ToolBase {
             .longOpt("conf-name")
             .hasArg()
             .argName("NAME")
-            .required(false) // should be true, but we have deprecated option 
as well.
-            .desc("Configset name in ZooKeeper.")
-            .build(),
-        Option.builder()
-            .longOpt("confname")
-            .hasArg()
-            .argName("NAME")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --conf-name instead")
-                    .get())
-            .required(false)
+            .required(true)
             .desc("Configset name in ZooKeeper.")
             .build(),
         Option.builder("d")
             .longOpt("conf-dir")
             .hasArg()
             .argName("DIR")
-            .required(false) // should be true, but we have deprecated option 
as well.
-            .desc("Local directory with configs.")
-            .build(),
-        Option.builder()
-            .longOpt("confdir")
-            .hasArg()
-            .argName("DIR")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --conf-dir instead")
-                    .get())
-            .required(false)
+            .required(true)
             .desc("Local directory with configs.")
             .build(),
         SolrCLI.OPTION_SOLRURL,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED_SHORT,
         SolrCLI.OPTION_ZKHOST,
-        SolrCLI.OPTION_ZKHOST_DEPRECATED,
         SolrCLI.OPTION_CREDENTIALS);
   }
 
@@ -112,15 +82,11 @@ public class ConfigSetUploadTool extends ToolBase {
     final String solrInstallDir = System.getProperty("solr.install.dir");
     Path solrInstallDirPath = Paths.get(solrInstallDir);
 
-    String confName =
-        cli.hasOption("conf-name")
-            ? cli.getOptionValue("conf-name")
-            : cli.getOptionValue("confname");
-    String confDir =
-        cli.hasOption("conf-dir") ? cli.getOptionValue("conf-dir") : 
cli.getOptionValue("confdir");
-    try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost)) {
-      echoIfVerbose("\nConnecting to ZooKeeper at " + zkHost + " ...");
+    String confName = cli.getOptionValue("conf-name");
+    String confDir = cli.getOptionValue("conf-dir");
 
+    echoIfVerbose("\nConnecting to ZooKeeper at " + zkHost + " ...");
+    try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost)) {
       final Path configsetsDirPath = 
SolrCLI.getConfigSetsDir(solrInstallDirPath);
       Path confPath = ConfigSetService.getConfigsetPath(confDir, 
configsetsDirPath.toString());
 
@@ -128,7 +94,7 @@ public class ConfigSetUploadTool extends ToolBase {
           "Uploading "
               + confPath.toAbsolutePath()
               + " for config "
-              + cli.getOptionValue("conf-name")
+              + confName
               + " to ZooKeeper at "
               + zkHost);
       FileTypeMagicUtil.assertConfigSetFolderLegal(confPath);
diff --git a/solr/core/src/java/org/apache/solr/cli/ConfigTool.java 
b/solr/core/src/java/org/apache/solr/cli/ConfigTool.java
index f1a90c071a7..5cc3f0909d6 100644
--- a/solr/core/src/java/org/apache/solr/cli/ConfigTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/ConfigTool.java
@@ -22,7 +22,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.DeprecatedAttributes;
 import org.apache.commons.cli.MissingArgumentException;
 import org.apache.commons.cli.Option;
 import org.apache.solr.client.solrj.SolrClient;
@@ -72,37 +71,10 @@ public class ConfigTool extends ToolBase {
             .longOpt("property")
             .argName("PROP")
             .hasArg()
-            .required(
-                false) // Should be TRUE but have a deprecated option to deal 
with first, so we
-            // enforce in code
-            .desc(
-                "Name of the Config API property to apply the action to, such 
as: 'updateHandler.autoSoftCommit.maxTime'.")
-            .build(),
-        Option.builder("p")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --property instead")
-                    .get())
-            .hasArg()
-            .argName("PROP")
-            .required(false)
+            .required(true)
             .desc(
                 "Name of the Config API property to apply the action to, such 
as: 'updateHandler.autoSoftCommit.maxTime'.")
             .build(),
-        Option.builder("v")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --value instead")
-                    .get())
-            .argName("VALUE")
-            .hasArg()
-            .required(false)
-            .desc("Set the property to this value; accepts JSON objects and 
strings.")
-            .build(),
         Option.builder()
             .longOpt("value")
             .argName("VALUE")
@@ -111,10 +83,7 @@ public class ConfigTool extends ToolBase {
             .desc("Set the property to this value; accepts JSON objects and 
strings.")
             .build(),
         SolrCLI.OPTION_SOLRURL,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED_SHORT,
         SolrCLI.OPTION_ZKHOST,
-        SolrCLI.OPTION_ZKHOST_DEPRECATED,
         SolrCLI.OPTION_CREDENTIALS);
   }
 
@@ -123,12 +92,8 @@ public class ConfigTool extends ToolBase {
     String solrUrl = SolrCLI.normalizeSolrUrl(cli);
     String action = cli.getOptionValue("action", "set-property");
     String collection = cli.getOptionValue("name");
-    String property = SolrCLI.getOptionWithDeprecatedAndDefault(cli, 
"property", "p", null);
-    String value = SolrCLI.getOptionWithDeprecatedAndDefault(cli, "value", 
"v", null);
-
-    if (property == null) {
-      throw new MissingArgumentException("'property' is a required option.");
-    }
+    String property = cli.getOptionValue("property");
+    String value = cli.getOptionValue("value");
 
     // value is required unless the property is one of the unset- type.
     if (!action.contains("unset-") && value == null) {
diff --git a/solr/core/src/java/org/apache/solr/cli/CreateTool.java 
b/solr/core/src/java/org/apache/solr/cli/CreateTool.java
index 41742c600a8..6c14ed6e21e 100644
--- a/solr/core/src/java/org/apache/solr/cli/CreateTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/CreateTool.java
@@ -27,7 +27,6 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.DeprecatedAttributes;
 import org.apache.commons.cli.Option;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.file.PathUtils;
@@ -97,20 +96,6 @@ public class CreateTool extends ToolBase {
             .desc(
                 "Number of copies of each document across the collection 
(replicas per shard); default is 1.")
             .build(),
-        Option.builder()
-            .longOpt("replicationFactor")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.7")
-                    .setDescription("Use --replication-factor instead")
-                    .get())
-            .hasArg()
-            .argName("#")
-            .required(false)
-            .desc(
-                "Number of copies of each document across the collection 
(replicas per shard); default is 1.")
-            .build(),
         Option.builder("d")
             .longOpt("conf-dir")
             .argName("DIR")
@@ -120,22 +105,6 @@ public class CreateTool extends ToolBase {
                     + SolrCLI.DEFAULT_CONFIG_SET
                     + '.')
             .build(),
-        Option.builder("confdir")
-            .longOpt("confdir")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.7")
-                    .setDescription("Use --conf-dir instead")
-                    .get())
-            .argName("DIR")
-            .hasArg()
-            .required(false)
-            .desc(
-                "Configuration directory to copy when creating the new 
collection; default is "
-                    + SolrCLI.DEFAULT_CONFIG_SET
-                    + '.')
-            .build(),
         Option.builder("n")
             .longOpt("conf-name")
             .argName("NAME")
@@ -143,24 +112,8 @@ public class CreateTool extends ToolBase {
             .required(false)
             .desc("Configuration name; default is the collection name.")
             .build(),
-        Option.builder("confname")
-            .longOpt("confname")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.7")
-                    .setDescription("Use --conf-name instead")
-                    .get())
-            .argName("NAME")
-            .hasArg()
-            .required(false)
-            .desc("Configuration name; default is the collection name.")
-            .build(),
         SolrCLI.OPTION_SOLRURL,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED_SHORT,
         SolrCLI.OPTION_ZKHOST,
-        SolrCLI.OPTION_ZKHOST_DEPRECATED,
         SolrCLI.OPTION_CREDENTIALS);
   }
 
@@ -182,10 +135,7 @@ public class CreateTool extends ToolBase {
     String solrUrl = cli.getOptionValue("solr-url", 
SolrCLI.getDefaultSolrUrl());
 
     final String solrInstallDir = System.getProperty("solr.install.dir");
-    final String confDirName =
-        cli.hasOption("confdir")
-            ? cli.getOptionValue("confdir")
-            : cli.getOptionValue("conf-dir", SolrCLI.DEFAULT_CONFIG_SET);
+    final String confDirName = cli.getOptionValue("conf-dir", 
SolrCLI.DEFAULT_CONFIG_SET);
 
     // we allow them to pass a directory instead of a configset name
     Path configsetDir = Paths.get(confDirName);
@@ -268,14 +218,8 @@ public class CreateTool extends ToolBase {
 
     String collectionName = cli.getOptionValue("name");
     final String solrInstallDir = System.getProperty("solr.install.dir");
-    String confName =
-        cli.hasOption("conf-name")
-            ? cli.getOptionValue("conf-name")
-            : cli.getOptionValue("confname");
-    String confDir =
-        cli.hasOption("confdir")
-            ? cli.getOptionValue("confdir")
-            : cli.getOptionValue("conf-dir", SolrCLI.DEFAULT_CONFIG_SET);
+    String confName = cli.getOptionValue("conf-name");
+    String confDir = cli.getOptionValue("conf-dir", 
SolrCLI.DEFAULT_CONFIG_SET);
     Path solrInstallDirPath = Paths.get(solrInstallDir);
     Path confDirPath = Paths.get(confDir);
     ensureConfDirExists(solrInstallDirPath, confDirPath);
@@ -299,8 +243,6 @@ public class CreateTool extends ToolBase {
 
     if (cli.hasOption("replication-factor")) {
       replicationFactor = 
Integer.parseInt(cli.getOptionValue("replication-factor"));
-    } else if (cli.hasOption("replicationFactor")) {
-      replicationFactor = 
Integer.parseInt(cli.getOptionValue("replicationFactor"));
     }
 
     boolean configExistsInZk =
@@ -397,16 +339,13 @@ public class CreateTool extends ToolBase {
   }
 
   private void printDefaultConfigsetWarningIfNecessary(CommandLine cli) {
-    final String confDirectoryName =
-        cli.hasOption("confdir")
-            ? cli.getOptionValue("confdir")
-            : cli.getOptionValue("conf-dir", SolrCLI.DEFAULT_CONFIG_SET);
-    final String confName = cli.getOptionValue("confname", "");
+    final String confDirectoryName = cli.getOptionValue("conf-dir", 
SolrCLI.DEFAULT_CONFIG_SET);
+    final String confName = cli.getOptionValue("conf-name", "");
 
     if (confDirectoryName.equals("_default")
         && (confName.equals("") || confName.equals("_default"))) {
       final String collectionName = cli.getOptionValue("name");
-      final String solrUrl = cli.getOptionValue("solrUrl", 
SolrCLI.getDefaultSolrUrl());
+      final String solrUrl = cli.getOptionValue("solr-url", 
SolrCLI.getDefaultSolrUrl());
       final String curlCommand =
           String.format(
               Locale.ROOT,
diff --git a/solr/core/src/java/org/apache/solr/cli/DeleteTool.java 
b/solr/core/src/java/org/apache/solr/cli/DeleteTool.java
index c89a3fb0301..069128663b4 100644
--- a/solr/core/src/java/org/apache/solr/cli/DeleteTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/DeleteTool.java
@@ -26,7 +26,6 @@ import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.DeprecatedAttributes;
 import org.apache.commons.cli.Option;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrServerException;
@@ -80,19 +79,6 @@ public class DeleteTool extends ToolBase {
             .required(true)
             .desc("Name of the core / collection to delete.")
             .build(),
-        Option.builder("d")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --delete-config instead")
-                    .get())
-            .hasArg()
-            .argName("true|false")
-            .required(false)
-            .desc(
-                "Flag to indicate if the underlying configuration directory 
for a collection should also be deleted; default is true.")
-            .build(),
         Option.builder()
             .longOpt("delete-config")
             .hasArg()
@@ -101,44 +87,6 @@ public class DeleteTool extends ToolBase {
             .desc(
                 "Flag to indicate if the underlying configuration directory 
for a collection should also be deleted; default is true.")
             .build(),
-        Option.builder()
-            .longOpt("deleteConfig")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.7")
-                    .setDescription("Use --delete-config instead")
-                    .get())
-            .hasArg()
-            .argName("true|false")
-            .required(false)
-            .desc(
-                "Flag to indicate if the underlying configuration directory 
for a collection should also be deleted; default is true.")
-            .build(),
-        Option.builder()
-            .longOpt("force-delete-config")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --force instead")
-                    .get())
-            .required(false)
-            .desc(
-                "Skip safety checks when deleting the configuration directory 
used by a collection.")
-            .build(),
-        Option.builder()
-            .longOpt("forceDeleteConfig")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.7")
-                    .setDescription("Use --force instead")
-                    .get())
-            .required(false)
-            .desc(
-                "Skip safety checks when deleting the configuration directory 
used by a collection.")
-            .build(),
         Option.builder("f")
             .longOpt("force")
             .required(false)
@@ -146,10 +94,7 @@ public class DeleteTool extends ToolBase {
                 "Skip safety checks when deleting the configuration directory 
used by a collection.")
             .build(),
         SolrCLI.OPTION_SOLRURL,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED_SHORT,
         SolrCLI.OPTION_ZKHOST,
-        SolrCLI.OPTION_ZKHOST_DEPRECATED,
         SolrCLI.OPTION_CREDENTIALS);
   }
 
@@ -201,16 +146,10 @@ public class DeleteTool extends ToolBase {
     boolean deleteConfig = true;
     if (cli.hasOption("delete-config")) {
       deleteConfig = "true".equals(cli.getOptionValue("delete-config"));
-    } else if (cli.hasOption("d")) {
-      deleteConfig = "true".equals(cli.getOptionValue("d"));
-    } else if (cli.hasOption("deleteConfig")) {
-      deleteConfig = "true".equals(cli.getOptionValue("deleteConfig"));
     }
 
     if (deleteConfig && configName != null) {
-      if (cli.hasOption("force")
-          || cli.hasOption("force-delete-config")
-          || cli.hasOption("forceDeleteConfig")) {
+      if (cli.hasOption("force")) {
         log.warn(
             "Skipping safety checks, configuration directory {} will be 
deleted with impunity.",
             configName);
diff --git a/solr/core/src/java/org/apache/solr/cli/ExportTool.java 
b/solr/core/src/java/org/apache/solr/cli/ExportTool.java
index 97e4774f391..699df52d330 100644
--- a/solr/core/src/java/org/apache/solr/cli/ExportTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/ExportTool.java
@@ -54,7 +54,6 @@ import java.util.function.BiConsumer;
 import java.util.function.Consumer;
 import java.util.zip.GZIPOutputStream;
 import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.DeprecatedAttributes;
 import org.apache.commons.cli.Option;
 import org.apache.lucene.util.SuppressForbidden;
 import org.apache.solr.client.solrj.SolrClient;
@@ -97,36 +96,12 @@ public class ExportTool extends ToolBase {
   @Override
   public List<Option> getOptions() {
     return List.of(
-        Option.builder("url")
-            .longOpt("solr-collection-url")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --solr-url and -c / --name instead")
-                    .get())
-            .hasArg()
-            .argName("URL")
-            .desc("Address of the collection, example 
http://localhost:8983/solr/gettingstarted.";)
-            .build(),
         Option.builder("c")
             .longOpt("name")
             .hasArg()
             .argName("NAME")
             .desc("Name of the collection.")
             .build(),
-        Option.builder("out")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --output instead")
-                    .get())
-            .hasArg()
-            .argName("PATH")
-            .desc(
-                "Path to output the exported data, and optionally the file 
name, defaults to 'collection-name'.")
-            .build(),
         Option.builder()
             .longOpt("output")
             .hasArg()
@@ -291,10 +266,8 @@ public class ExportTool extends ToolBase {
       }
       url = SolrCLI.normalizeSolrUrl(cli) + "/solr/" + 
cli.getOptionValue("name");
 
-    } else if (cli.hasOption("solr-collection-url")) {
-      url = cli.getOptionValue("solr-collection-url");
     } else {
-      // Swap to required Option when --solr-collection-url removed.
+      // think about support --zk-host someday.
       throw new IllegalArgumentException("Must specify --solr-url.");
     }
     String credentials = 
cli.getOptionValue(SolrCLI.OPTION_CREDENTIALS.getLongOpt());
@@ -302,9 +275,7 @@ public class ExportTool extends ToolBase {
     info.query = cli.getOptionValue("query", "*:*");
 
     info.setOutFormat(
-        SolrCLI.getOptionWithDeprecatedAndDefault(cli, "output", "out", null),
-        cli.getOptionValue("format"),
-        cli.hasOption("compress"));
+        cli.getOptionValue("output"), cli.getOptionValue("format"), 
cli.hasOption("compress"));
     info.fields = cli.getOptionValue("fields");
     info.setLimit(cli.getOptionValue("limit", "100"));
     info.output = super.stdout;
diff --git a/solr/core/src/java/org/apache/solr/cli/HealthcheckTool.java 
b/solr/core/src/java/org/apache/solr/cli/HealthcheckTool.java
index 58024d47ac7..dcc3aa91d11 100644
--- a/solr/core/src/java/org/apache/solr/cli/HealthcheckTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/HealthcheckTool.java
@@ -64,10 +64,7 @@ public class HealthcheckTool extends ToolBase {
             .desc("Name of the collection to check.")
             .build(),
         SolrCLI.OPTION_SOLRURL,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED_SHORT,
         SolrCLI.OPTION_ZKHOST,
-        SolrCLI.OPTION_ZKHOST_DEPRECATED,
         SolrCLI.OPTION_CREDENTIALS);
   }
 
diff --git a/solr/core/src/java/org/apache/solr/cli/LinkConfigTool.java 
b/solr/core/src/java/org/apache/solr/cli/LinkConfigTool.java
index 1e48a890f3b..da553eb735e 100644
--- a/solr/core/src/java/org/apache/solr/cli/LinkConfigTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/LinkConfigTool.java
@@ -64,8 +64,7 @@ public class LinkConfigTool extends ToolBase {
             .required(true)
             .desc("Configset name in ZooKeeper.")
             .build(),
-        SolrCLI.OPTION_ZKHOST,
-        SolrCLI.OPTION_ZKHOST_DEPRECATED);
+        SolrCLI.OPTION_ZKHOST);
   }
 
   @Override
diff --git a/solr/core/src/java/org/apache/solr/cli/PackageTool.java 
b/solr/core/src/java/org/apache/solr/cli/PackageTool.java
index 07c5487df48..0089e896ad4 100644
--- a/solr/core/src/java/org/apache/solr/cli/PackageTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/PackageTool.java
@@ -27,7 +27,6 @@ import java.nio.file.Path;
 import java.util.List;
 import java.util.Map;
 import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.DeprecatedAttributes;
 import org.apache.commons.cli.Option;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.config.Configurator;
@@ -174,10 +173,7 @@ public class PackageTool extends ToolBase {
                           ? PackageUtils.validateCollections(
                               cli.getOptionValue("collections").split(","))
                           : new String[] {};
-                  String[] parameters =
-                      cli.hasOption("param")
-                          ? cli.getOptionValues("param")
-                          : cli.getOptionValues("p");
+                  String[] parameters = cli.getOptionValues("param");
                   packageManager.deploy(
                       packageName,
                       version,
@@ -341,18 +337,6 @@ public class PackageTool extends ToolBase {
             .argName("PARAMS")
             .desc("List of parameters to be used with deploy command.")
             .build(),
-        Option.builder("p")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --param instead")
-                    .get())
-            .hasArg()
-            .argName("PARAMS")
-            .required(false)
-            .desc("List of parameters to be used with deploy command.")
-            .build(),
         Option.builder()
             .longOpt("update")
             .desc("If a deployment is an update over a previous deployment.")
@@ -368,10 +352,7 @@ public class PackageTool extends ToolBase {
             .desc("Don't prompt for input; accept all default choices, 
defaults to false.")
             .build(),
         SolrCLI.OPTION_SOLRURL,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED_SHORT,
         SolrCLI.OPTION_ZKHOST,
-        SolrCLI.OPTION_ZKHOST_DEPRECATED,
         SolrCLI.OPTION_CREDENTIALS);
   }
 }
diff --git a/solr/core/src/java/org/apache/solr/cli/PostLogsTool.java 
b/solr/core/src/java/org/apache/solr/cli/PostLogsTool.java
index 61b07eecb96..7be103ea923 100644
--- a/solr/core/src/java/org/apache/solr/cli/PostLogsTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/PostLogsTool.java
@@ -36,7 +36,6 @@ import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.DeprecatedAttributes;
 import org.apache.commons.cli.Option;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.impl.Http2SolrClient;
@@ -65,21 +64,10 @@ public class PostLogsTool extends ToolBase {
   @Override
   public List<Option> getOptions() {
     return List.of(
-        Option.builder("url")
-            .longOpt("solr-collection-url")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --solr-url and -c / --name instead")
-                    .get())
-            .hasArg()
-            .argName("ADDRESS")
-            .desc("Address of the collection, example 
http://localhost:8983/solr/collection1/.";)
-            .build(),
         Option.builder("c")
             .longOpt("name")
             .hasArg()
+            .required(true)
             .argName("NAME")
             .desc("Name of the collection.")
             .build(),
@@ -98,16 +86,10 @@ public class PostLogsTool extends ToolBase {
   public void runImpl(CommandLine cli) throws Exception {
     String url = null;
     if (cli.hasOption("solr-url")) {
-      if (!cli.hasOption("name")) {
-        throw new IllegalArgumentException(
-            "Must specify -c / --name parameter with --solr-url to post 
documents.");
-      }
       url = SolrCLI.normalizeSolrUrl(cli) + "/solr/" + 
cli.getOptionValue("name");
 
-    } else if (cli.hasOption("solr-collection-url")) {
-      url = cli.getOptionValue("solr-collection-url");
     } else {
-      // Swap to required Option when --solr-collection-url removed.
+      // Could be required arg, but maybe we want to support --zk-host option 
too?
       throw new IllegalArgumentException("Must specify --solr-url.");
     }
     String rootDir = cli.getOptionValue("rootdir");
diff --git a/solr/core/src/java/org/apache/solr/cli/PostTool.java 
b/solr/core/src/java/org/apache/solr/cli/PostTool.java
index d479a90aaba..b888fdca589 100644
--- a/solr/core/src/java/org/apache/solr/cli/PostTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/PostTool.java
@@ -67,7 +67,6 @@ import javax.xml.xpath.XPathExpression;
 import javax.xml.xpath.XPathExpressionException;
 import javax.xml.xpath.XPathFactory;
 import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.DeprecatedAttributes;
 import org.apache.commons.cli.Option;
 import org.apache.commons.io.output.NullOutputStream;
 import org.apache.solr.client.api.util.SolrVersion;
@@ -172,21 +171,10 @@ public class PostTool extends ToolBase {
   @Override
   public List<Option> getOptions() {
     return List.of(
-        Option.builder("url")
-            .longOpt("solr-update-url")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --solr-url and -c / --name instead")
-                    .get())
-            .hasArg()
-            .argName("UPDATEURL")
-            .desc("Solr Update URL, the full url to the update handler, 
including the /update.")
-            .build(),
         Option.builder("c")
             .longOpt("name")
             .hasArg()
+            .required(true)
             .argName("NAME")
             .desc("Name of the collection.")
             .build(),
@@ -194,16 +182,6 @@ public class PostTool extends ToolBase {
             .longOpt("skip-commit")
             .desc("Do not 'commit', and thus changes won't be visible till a 
commit occurs.")
             .build(),
-        Option.builder()
-            .longOpt("skipcommit")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.7")
-                    .setDescription("Use --skip-commit instead")
-                    .get())
-            .desc("Do not 'commit', and thus changes won't be visible till a 
commit occurs.")
-            .build(),
         Option.builder("o")
             .longOpt("optimize")
             .desc("Issue an optimize at end of posting documents.")
@@ -222,19 +200,6 @@ public class PostTool extends ToolBase {
             .required(false)
             .desc("For web crawl, how deep to go. default: 1")
             .build(),
-        Option.builder("d")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --delay instead")
-                    .get())
-            .hasArg()
-            .argName("delay")
-            .required(false)
-            .desc(
-                "If recursive then delay will be the wait time between posts.  
default: 10 for web, 0 for files")
-            .build(),
         Option.builder()
             .longOpt("delay")
             .hasArg()
@@ -264,40 +229,6 @@ public class PostTool extends ToolBase {
             .required(false)
             .desc("Values must be URL-encoded; these pass through to Solr 
update request.")
             .build(),
-        Option.builder("p")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --params instead")
-                    .get())
-            .hasArg()
-            .argName("<key>=<value>[&<key>=<value>...]")
-            .required(false)
-            .desc("Values must be URL-encoded; these pass through to Solr 
update request.")
-            .build(),
-        Option.builder()
-            .longOpt("out")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --verbose instead")
-                    .get())
-            .required(false)
-            .desc("sends Solr response outputs to console.")
-            .build(),
-        Option.builder("f")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --format instead")
-                    .get())
-            .required(false)
-            .desc(
-                "sends application/json content as Solr commands to /update 
instead of /update/json/docs.")
-            .build(),
         Option.builder()
             .longOpt("format")
             .required(false)
@@ -320,23 +251,13 @@ public class PostTool extends ToolBase {
 
     solrUpdateUrl = null;
     if (cli.hasOption("solr-url")) {
-      if (!cli.hasOption("name")) {
-        throw new IllegalArgumentException(
-            "Must specify -c / --name parameter with --solr-url to post 
documents.");
-      }
       String url =
           SolrCLI.normalizeSolrUrl(cli) + "/solr/" + 
cli.getOptionValue("name") + "/update";
       solrUpdateUrl = new URI(url);
 
-    } else if (cli.hasOption("solr-update-url")) {
-      String url = cli.getOptionValue("solr-update-url");
-      solrUpdateUrl = new URI(url);
-    } else if (cli.hasOption("name")) {
+    } else {
       String url = SolrCLI.getDefaultSolrUrl() + "/solr/" + 
cli.getOptionValue("name") + "/update";
       solrUpdateUrl = new URI(url);
-    } else {
-      throw new IllegalArgumentException(
-          "Must specify either --solr-update-url or -c parameter to post 
documents.");
     }
 
     String mode = cli.getOptionValue("mode", DATA_MODE_FILES);
@@ -348,10 +269,7 @@ public class PostTool extends ToolBase {
       // Turn off automatically looking up the mimetype in favour of what is 
passed in.
       auto = false;
     }
-    format =
-        cli.hasOption("format") || cli.hasOption("f")
-            ? FORMAT_SOLR
-            : ""; // i.e not solr formatted json commands
+    format = cli.hasOption("format") ? FORMAT_SOLR : ""; // i.e not solr 
formatted json commands
 
     if (cli.hasOption("filetypes")) {
       fileTypes = cli.getOptionValue("filetypes");
@@ -360,24 +278,19 @@ public class PostTool extends ToolBase {
     delay = (mode.equals((DATA_MODE_WEB)) ? 10 : 0);
     if (cli.hasOption("delay")) {
       delay = Integer.parseInt(cli.getOptionValue("delay"));
-    } else if (cli.hasOption("d")) {
-      delay = Integer.parseInt(cli.getOptionValue("d"));
     }
 
     recursive = Integer.parseInt(cli.getOptionValue("recursive", "1"));
 
-    out =
-        cli.hasOption("out") || 
cli.hasOption(SolrCLI.OPTION_VERBOSE.getLongOpt())
-            ? CLIO.getOutStream()
-            : null;
-    commit = !(cli.hasOption("skipcommit") || cli.hasOption("skip-commit"));
+    out = cli.hasOption(SolrCLI.OPTION_VERBOSE.getLongOpt()) ? 
CLIO.getOutStream() : null;
+    commit = !cli.hasOption("skip-commit");
     optimize = cli.hasOption("optimize");
 
     credentials = cli.getOptionValue(SolrCLI.OPTION_CREDENTIALS.getLongOpt());
 
     args = cli.getArgs();
 
-    params = SolrCLI.getOptionWithDeprecatedAndDefault(cli, "params", "p", "");
+    params = cli.getOptionValue("params", "");
 
     execute(mode);
   }
diff --git a/solr/core/src/java/org/apache/solr/cli/RunExampleTool.java 
b/solr/core/src/java/org/apache/solr/cli/RunExampleTool.java
index 95c746f82b7..51f1d634703 100644
--- a/solr/core/src/java/org/apache/solr/cli/RunExampleTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/RunExampleTool.java
@@ -36,7 +36,6 @@ import java.util.Scanner;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.DeprecatedAttributes;
 import org.apache.commons.cli.Option;
 import org.apache.commons.exec.DefaultExecuteResultHandler;
 import org.apache.commons.exec.DefaultExecutor;
@@ -100,18 +99,6 @@ public class RunExampleTool extends ToolBase {
             .desc(
                 "Don't prompt for input; accept all defaults when running 
examples that accept user input.")
             .build(),
-        Option.builder()
-            .longOpt("noprompt")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.7")
-                    .setDescription("Use --no-prompt instead")
-                    .get())
-            .required(false)
-            .desc(
-                "Don't prompt for input; accept all defaults when running 
examples that accept user input.")
-            .build(),
         Option.builder("e")
             .longOpt("example")
             .hasArg()
@@ -188,8 +175,7 @@ public class RunExampleTool extends ToolBase {
             .desc(
                 "Additional options to be passed to the JVM when starting 
example Solr server(s).")
             .build(),
-        SolrCLI.OPTION_ZKHOST,
-        SolrCLI.OPTION_ZKHOST_DEPRECATED);
+        SolrCLI.OPTION_ZKHOST);
   }
 
   @Override
@@ -447,7 +433,7 @@ public class RunExampleTool extends ToolBase {
 
   protected void runCloudExample(CommandLine cli) throws Exception {
 
-    boolean prompt = !(cli.hasOption("no-prompt") || 
cli.hasOption("noprompt"));
+    boolean prompt = !cli.hasOption("no-prompt");
     int numNodes = 2;
     int[] cloudPorts = new int[] {8983, 7574, 8984, 7575};
     int defaultPort =
diff --git a/solr/core/src/java/org/apache/solr/cli/SnapshotCreateTool.java 
b/solr/core/src/java/org/apache/solr/cli/SnapshotCreateTool.java
index 11ff8a205e3..d80dfbc61ea 100644
--- a/solr/core/src/java/org/apache/solr/cli/SnapshotCreateTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/SnapshotCreateTool.java
@@ -45,7 +45,6 @@ public class SnapshotCreateTool extends ToolBase {
     return List.of(
         SolrCLI.OPTION_ZKHOST,
         SolrCLI.OPTION_SOLRURL,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED_SHORT,
         Option.builder("c")
             .longOpt("name")
             .argName("NAME")
diff --git a/solr/core/src/java/org/apache/solr/cli/SnapshotDeleteTool.java 
b/solr/core/src/java/org/apache/solr/cli/SnapshotDeleteTool.java
index 8529a35d2f0..d172391183e 100644
--- a/solr/core/src/java/org/apache/solr/cli/SnapshotDeleteTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/SnapshotDeleteTool.java
@@ -45,7 +45,6 @@ public class SnapshotDeleteTool extends ToolBase {
     return List.of(
         SolrCLI.OPTION_ZKHOST,
         SolrCLI.OPTION_SOLRURL,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED_SHORT,
         Option.builder("c")
             .longOpt("name")
             .argName("NAME")
diff --git a/solr/core/src/java/org/apache/solr/cli/SnapshotDescribeTool.java 
b/solr/core/src/java/org/apache/solr/cli/SnapshotDescribeTool.java
index b8673a6579a..a007b75f075 100644
--- a/solr/core/src/java/org/apache/solr/cli/SnapshotDescribeTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/SnapshotDescribeTool.java
@@ -58,7 +58,6 @@ public class SnapshotDescribeTool extends ToolBase {
     return List.of(
         SolrCLI.OPTION_ZKHOST,
         SolrCLI.OPTION_SOLRURL,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED_SHORT,
         Option.builder("c")
             .longOpt("name")
             .argName("NAME")
diff --git a/solr/core/src/java/org/apache/solr/cli/SnapshotExportTool.java 
b/solr/core/src/java/org/apache/solr/cli/SnapshotExportTool.java
index 9cc5668d6c3..8471ec79287 100644
--- a/solr/core/src/java/org/apache/solr/cli/SnapshotExportTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/SnapshotExportTool.java
@@ -20,7 +20,6 @@ import java.io.PrintStream;
 import java.util.List;
 import java.util.Optional;
 import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.DeprecatedAttributes;
 import org.apache.commons.cli.Option;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
@@ -47,7 +46,6 @@ public class SnapshotExportTool extends ToolBase {
     return List.of(
         SolrCLI.OPTION_ZKHOST,
         SolrCLI.OPTION_SOLRURL,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED_SHORT,
         Option.builder("c")
             .longOpt("name")
             .argName("NAME")
@@ -78,19 +76,6 @@ public class SnapshotExportTool extends ToolBase {
             .desc(
                 "Specifies name of the backup repository to be used during 
snapshot export preparation.")
             .build(),
-        Option.builder("i")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --async-id instead")
-                    .get())
-            .argName("ID")
-            .hasArg()
-            .required(false)
-            .desc(
-                "Specifies the async request identifier to be used during 
snapshot export preparation.")
-            .build(),
         Option.builder()
             .longOpt("async-id")
             .argName("ID")
@@ -111,9 +96,6 @@ public class SnapshotExportTool extends ToolBase {
     String destDir = cli.getOptionValue("dest-dir");
     Optional<String> backupRepo = 
Optional.ofNullable(cli.getOptionValue("backup-repo-name"));
     Optional<String> asyncReqId = 
Optional.ofNullable(cli.getOptionValue("async-id"));
-    if (cli.hasOption("i")) {
-      asyncReqId = Optional.ofNullable(cli.getOptionValue("i"));
-    }
 
     try (var solrClient = SolrCLI.getSolrClient(cli)) {
       exportSnapshot(solrClient, collectionName, snapshotName, destDir, 
backupRepo, asyncReqId);
diff --git a/solr/core/src/java/org/apache/solr/cli/SnapshotListTool.java 
b/solr/core/src/java/org/apache/solr/cli/SnapshotListTool.java
index 5ccaf6d6cc5..a1db955b0c0 100644
--- a/solr/core/src/java/org/apache/solr/cli/SnapshotListTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/SnapshotListTool.java
@@ -47,7 +47,6 @@ public class SnapshotListTool extends ToolBase {
     return List.of(
         SolrCLI.OPTION_ZKHOST,
         SolrCLI.OPTION_SOLRURL,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED_SHORT,
         Option.builder("c")
             .longOpt("name")
             .argName("NAME")
diff --git a/solr/core/src/java/org/apache/solr/cli/SolrCLI.java 
b/solr/core/src/java/org/apache/solr/cli/SolrCLI.java
index 98c22c7f6d8..9f762459fcb 100755
--- a/solr/core/src/java/org/apache/solr/cli/SolrCLI.java
+++ b/solr/core/src/java/org/apache/solr/cli/SolrCLI.java
@@ -46,7 +46,6 @@ import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 import org.apache.commons.cli.CommandLine;
 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;
@@ -88,24 +87,6 @@ public class SolrCLI implements CLIO {
 
   public static final String ZK_HOST = "localhost:9983";
 
-  public static final Option OPTION_ZKHOST_DEPRECATED =
-      Option.builder("zkHost")
-          .longOpt("zkHost")
-          .deprecated(
-              DeprecatedAttributes.builder()
-                  .setForRemoval(true)
-                  .setSince("9.7")
-                  .setDescription("Use --zk-host instead")
-                  .get())
-          .argName("HOST")
-          .hasArg()
-          .required(false)
-          .desc(
-              "Zookeeper connection string; unnecessary if ZK_HOST is defined 
in solr.in.sh; otherwise, defaults to "
-                  + ZK_HOST
-                  + '.')
-          .build();
-
   public static final Option OPTION_ZKHOST =
       Option.builder("z")
           .longOpt("zk-host")
@@ -117,23 +98,6 @@ public class SolrCLI implements CLIO {
                   + ZK_HOST
                   + '.')
           .build();
-  public static final Option OPTION_SOLRURL_DEPRECATED =
-      Option.builder("solrUrl")
-          .longOpt("solrUrl")
-          .deprecated(
-              DeprecatedAttributes.builder()
-                  .setForRemoval(true)
-                  .setSince("9.7")
-                  .setDescription("Use --solr-url instead")
-                  .get())
-          .argName("HOST")
-          .hasArg()
-          .required(false)
-          .desc(
-              "Base Solr URL, which can be used to determine the zk-host if 
that's not known; defaults to: "
-                  + getDefaultSolrUrl()
-                  + '.')
-          .build();
   public static final Option OPTION_SOLRURL =
       Option.builder("s")
           .longOpt("solr-url")
@@ -145,22 +109,6 @@ public class SolrCLI implements CLIO {
                   + getDefaultSolrUrl()
                   + '.')
           .build();
-  public static final Option OPTION_SOLRURL_DEPRECATED_SHORT =
-      Option.builder("url")
-          .argName("HOST")
-          .hasArg()
-          .required(false)
-          .deprecated(
-              DeprecatedAttributes.builder()
-                  .setForRemoval(true)
-                  .setSince("9.7")
-                  .setDescription("Use -s instead")
-                  .get())
-          .desc(
-              "Base Solr URL, which can be used to determine the zk-host if 
that's not known; defaults to: "
-                  + getDefaultSolrUrl()
-                  + '.')
-          .build();
 
   public static final Option OPTION_VERBOSE =
       Option.builder()
@@ -172,19 +120,6 @@ public class SolrCLI implements CLIO {
   public static final Option OPTION_HELP =
       Option.builder("h").longOpt("help").required(false).desc("Print this 
message.").build();
 
-  public static final Option OPTION_RECURSE_DEPRECATED =
-      Option.builder()
-          .longOpt("recurse")
-          .deprecated(
-              DeprecatedAttributes.builder()
-                  .setForRemoval(true)
-                  .setSince("9.8")
-                  .setDescription("Use --recursive instead")
-                  .get())
-          .required(false)
-          .desc("Apply the command recursively.")
-          .build();
-
   public static final Option OPTION_RECURSIVE =
       Option.builder("r")
           .longOpt("recursive")
@@ -215,19 +150,13 @@ public class SolrCLI implements CLIO {
   public static void main(String[] args) throws Exception {
     final boolean hasNoCommand =
         args == null || args.length == 0 || args[0] == null || 
args[0].trim().length() == 0;
-    final boolean isHelpCommand =
-        !hasNoCommand && Arrays.asList("-h", "--help", "/?").contains(args[0]);
+    final boolean isHelpCommand = !hasNoCommand && Arrays.asList("-h", 
"--help").contains(args[0]);
 
     if (hasNoCommand || isHelpCommand) {
       printHelp();
       exit(1);
     }
 
-    if (Arrays.asList("-version", "version").contains(args[0])) {
-      // select the version tool to be run
-      CLIO.out("Deprecated operation as of 9.8.  Please use bin/solr 
--version.");
-      args = new String[] {"version"};
-    }
     if (Arrays.asList("-v", "--version").contains(args[0])) {
       // select the version tool to be run
       args = new String[] {"version"};
@@ -243,7 +172,7 @@ public class SolrCLI implements CLIO {
         // remap our arguments to invoke the ZK tool help.
         args = new String[] {"zk-tool-help", "--print-long-zk-usage"};
       } else if (args.length == 2) {
-        if (Arrays.asList("-h", "--help", "/?").contains(args[1])) {
+        if (Arrays.asList("-h", "--help").contains(args[1])) {
           // remap our arguments to invoke the ZK tool help.
           args = new String[] {"zk-tool-help", "--print-long-zk-usage"};
         } else {
@@ -411,6 +340,10 @@ public class SolrCLI implements CLIO {
   /**
    * Returns the value of the option with the given name, or the value of the 
deprecated option. If
    * both values are null, then it returns the default value.
+   *
+   * <p>If this method is marked as unused by your IDE, it means we have no 
deprecated CLI options
+   * currently, congratulations! This method is preserved for the next time we 
need to deprecate a
+   * CLI option.
    */
   public static String getOptionWithDeprecatedAndDefault(
       CommandLine cli, String opt, String deprecated, String def) {
@@ -462,7 +395,7 @@ public class SolrCLI implements CLIO {
       boolean hasHelpArg = false;
       if (args != null) {
         for (String arg : args) {
-          if ("-h".equals(arg) || "--help".equals(arg) || "-help".equals(arg)) 
{
+          if ("-h".equals(arg) || "--help".equals(arg)) {
             hasHelpArg = true;
             break;
           }
@@ -739,18 +672,10 @@ public class SolrCLI implements CLIO {
    * ZooKeeper.
    */
   public static String normalizeSolrUrl(CommandLine cli) throws Exception {
-    String solrUrl = null;
-    if (cli.hasOption("solr-url")) {
-      solrUrl = cli.getOptionValue("solr-url");
-    } else if (cli.hasOption("solrUrl")) {
-      solrUrl = cli.getOptionValue("solrUrl");
-    } else if (cli.hasOption("url")) {
-      solrUrl = cli.getOptionValue("url");
-    }
+    String solrUrl = cli.getOptionValue("solr-url");
 
     if (solrUrl == null) {
-      String zkHost =
-          cli.hasOption("zk-host") ? cli.getOptionValue("zk-host") : 
cli.getOptionValue("zkHost");
+      String zkHost = cli.getOptionValue("zk-host");
       if (zkHost == null) {
         solrUrl = SolrCLI.getDefaultSolrUrl();
         CLIO.err(
@@ -781,8 +706,7 @@ public class SolrCLI implements CLIO {
    */
   public static String getZkHost(CommandLine cli) throws Exception {
 
-    String zkHost =
-        cli.hasOption("zk-host") ? cli.getOptionValue("zk-host") : 
cli.getOptionValue("zkHost");
+    String zkHost = cli.getOptionValue("zk-host");
     if (zkHost != null && !zkHost.isBlank()) {
       return zkHost;
     }
diff --git a/solr/core/src/java/org/apache/solr/cli/StatusTool.java 
b/solr/core/src/java/org/apache/solr/cli/StatusTool.java
index 94f46b106dd..16ad16e5946 100644
--- a/solr/core/src/java/org/apache/solr/cli/StatusTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/StatusTool.java
@@ -236,7 +236,7 @@ public class StatusTool extends ToolBase {
     }
   }
 
-  public boolean printStatusFromRunningSolr(String solrUrl, CommandLine cli) 
throws Exception {
+  public boolean printStatusFromRunningSolr(String solrUrl, CommandLine cli) {
     String statusJson = null;
     try {
       statusJson = statusFromRunningSolr(solrUrl, cli);
diff --git a/solr/core/src/java/org/apache/solr/cli/UpdateACLTool.java 
b/solr/core/src/java/org/apache/solr/cli/UpdateACLTool.java
index f98959a89c7..e9a9c5b444e 100644
--- a/solr/core/src/java/org/apache/solr/cli/UpdateACLTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/UpdateACLTool.java
@@ -54,7 +54,7 @@ public class UpdateACLTool extends ToolBase {
 
   @Override
   public List<Option> getOptions() {
-    return List.of(SolrCLI.OPTION_ZKHOST, SolrCLI.OPTION_ZKHOST_DEPRECATED);
+    return List.of(SolrCLI.OPTION_ZKHOST);
   }
 
   @Override
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkCpTool.java 
b/solr/core/src/java/org/apache/solr/cli/ZkCpTool.java
index 197156c8652..488618e2f41 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkCpTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/ZkCpTool.java
@@ -62,13 +62,9 @@ public class ZkCpTool extends ToolBase {
             .required(false)
             .desc("Required to look up configuration for compressing 
state.json.")
             .build(),
-        SolrCLI.OPTION_RECURSE_DEPRECATED,
         SolrCLI.OPTION_RECURSIVE,
         SolrCLI.OPTION_SOLRURL,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED_SHORT,
         SolrCLI.OPTION_ZKHOST,
-        SolrCLI.OPTION_ZKHOST_DEPRECATED,
         SolrCLI.OPTION_CREDENTIALS);
   }
 
@@ -133,7 +129,7 @@ public class ZkCpTool extends ToolBase {
     echoIfVerbose("\nConnecting to ZooKeeper at " + zkHost + " ...");
     String src = cli.getArgs()[0];
     String dst = cli.getArgs()[1];
-    boolean recursive = cli.hasOption("recursive") || cli.hasOption("recurse");
+    boolean recursive = cli.hasOption("recursive");
     echo("Copying from '" + src + "' to '" + dst + "'. ZooKeeper at " + 
zkHost);
 
     boolean srcIsZk = src.toLowerCase(Locale.ROOT).startsWith("zk:");
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkLsTool.java 
b/solr/core/src/java/org/apache/solr/cli/ZkLsTool.java
index 329e8f47dc3..cefb37b0e76 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkLsTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/ZkLsTool.java
@@ -40,13 +40,9 @@ public class ZkLsTool extends ToolBase {
   @Override
   public List<Option> getOptions() {
     return List.of(
-        SolrCLI.OPTION_RECURSE_DEPRECATED,
         SolrCLI.OPTION_RECURSIVE,
         SolrCLI.OPTION_SOLRURL,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED_SHORT,
         SolrCLI.OPTION_ZKHOST,
-        SolrCLI.OPTION_ZKHOST_DEPRECATED,
         SolrCLI.OPTION_CREDENTIALS);
   }
 
@@ -70,7 +66,7 @@ public class ZkLsTool extends ToolBase {
     try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost)) {
       echoIfVerbose("\nConnecting to ZooKeeper at " + zkHost + " ...");
 
-      boolean recursive = cli.hasOption("recursive") || 
cli.hasOption("recurse");
+      boolean recursive = cli.hasOption("recursive");
       echoIfVerbose(
           "Getting listing for ZooKeeper node "
               + znode
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkMkrootTool.java 
b/solr/core/src/java/org/apache/solr/cli/ZkMkrootTool.java
index 3c69b7b0d10..606586d1b4f 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkMkrootTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/ZkMkrootTool.java
@@ -49,10 +49,7 @@ public class ZkMkrootTool extends ToolBase {
             .desc("Raise an error if the root exists.  Defaults to false.")
             .build(),
         SolrCLI.OPTION_SOLRURL,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED_SHORT,
         SolrCLI.OPTION_ZKHOST,
-        SolrCLI.OPTION_ZKHOST_DEPRECATED,
         SolrCLI.OPTION_CREDENTIALS);
   }
 
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkMvTool.java 
b/solr/core/src/java/org/apache/solr/cli/ZkMvTool.java
index 339d7e41040..f49f1484c4b 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkMvTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/ZkMvTool.java
@@ -43,13 +43,7 @@ public class ZkMvTool extends ToolBase {
 
   @Override
   public List<Option> getOptions() {
-    return List.of(
-        SolrCLI.OPTION_SOLRURL,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED_SHORT,
-        SolrCLI.OPTION_ZKHOST,
-        SolrCLI.OPTION_ZKHOST_DEPRECATED,
-        SolrCLI.OPTION_CREDENTIALS);
+    return List.of(SolrCLI.OPTION_SOLRURL, SolrCLI.OPTION_ZKHOST, 
SolrCLI.OPTION_CREDENTIALS);
   }
 
   @Override
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkRmTool.java 
b/solr/core/src/java/org/apache/solr/cli/ZkRmTool.java
index bf3e408ca53..4f4e1bf62e6 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkRmTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/ZkRmTool.java
@@ -42,13 +42,9 @@ public class ZkRmTool extends ToolBase {
   @Override
   public List<Option> getOptions() {
     return List.of(
-        SolrCLI.OPTION_RECURSE_DEPRECATED,
         SolrCLI.OPTION_RECURSIVE,
         SolrCLI.OPTION_SOLRURL,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED,
-        SolrCLI.OPTION_SOLRURL_DEPRECATED_SHORT,
         SolrCLI.OPTION_ZKHOST,
-        SolrCLI.OPTION_ZKHOST_DEPRECATED,
         SolrCLI.OPTION_CREDENTIALS);
   }
 
@@ -68,7 +64,7 @@ public class ZkRmTool extends ToolBase {
     String zkHost = SolrCLI.getZkHost(cli);
 
     String target = cli.getArgs()[0];
-    boolean recursive = cli.hasOption("recursive") || cli.hasOption("recurse");
+    boolean recursive = cli.hasOption("recursive");
 
     String znode = target;
     if (target.toLowerCase(Locale.ROOT).startsWith("zk:")) {
diff --git a/solr/core/src/test/org/apache/solr/cli/CreateToolTest.java 
b/solr/core/src/test/org/apache/solr/cli/CreateToolTest.java
index 838c3857ce9..7b4da6f9901 100644
--- a/solr/core/src/test/org/apache/solr/cli/CreateToolTest.java
+++ b/solr/core/src/test/org/apache/solr/cli/CreateToolTest.java
@@ -51,7 +51,7 @@ public class CreateToolTest extends SolrCloudTestCase {
       cluster.getZkClient().getZkServerAddress(),
       "--credentials",
       SecurityJson.USER_PASS,
-      "-verbose"
+      "--verbose"
     };
 
     assertEquals(0, runTool(args));
diff --git a/solr/core/src/test/org/apache/solr/cli/DeleteToolTest.java 
b/solr/core/src/test/org/apache/solr/cli/DeleteToolTest.java
index 86459b1f71a..8f66d104d4e 100644
--- a/solr/core/src/test/org/apache/solr/cli/DeleteToolTest.java
+++ b/solr/core/src/test/org/apache/solr/cli/DeleteToolTest.java
@@ -66,7 +66,7 @@ public class DeleteToolTest extends SolrCloudTestCase {
       cluster.getZkClient().getZkServerAddress(),
       "--credentials",
       SecurityJson.USER_PASS,
-      "-verbose"
+      "--verbose"
     };
     assertEquals(0, runTool(args));
   }
@@ -89,7 +89,7 @@ public class DeleteToolTest extends SolrCloudTestCase {
       "testFailsToDeleteProtectedCollection",
       "-z",
       cluster.getZkClient().getZkServerAddress(),
-      "-verbose"
+      "--verbose"
     };
     assertEquals(1, runTool(args));
   }
diff --git a/solr/core/src/test/org/apache/solr/cli/PackageToolTest.java 
b/solr/core/src/test/org/apache/solr/cli/PackageToolTest.java
index f4155641910..fa75ba3206e 100644
--- a/solr/core/src/test/org/apache/solr/cli/PackageToolTest.java
+++ b/solr/core/src/test/org/apache/solr/cli/PackageToolTest.java
@@ -168,7 +168,7 @@ public class PackageToolTest extends SolrCloudTestCase {
           "-y",
           "--collections",
           "abc",
-          "-p",
+          "--param",
           "RH-HANDLER-PATH=" + rhPath,
           "--credentials",
           SecurityJson.USER_PASS
diff --git a/solr/packaging/test/test_bats.bats 
b/solr/packaging/test/test_bats.bats
index fae2f5be371..631fe2a8f87 100644
--- a/solr/packaging/test/test_bats.bats
+++ b/solr/packaging/test/test_bats.bats
@@ -23,7 +23,7 @@ setup_file() {
   # set up paths and helpers
   common_clean_setup
 
-  solr start -V
+  solr start --verbose
   # echo $output >&3
 }
 
diff --git a/solr/packaging/test/test_config.bats 
b/solr/packaging/test/test_config.bats
index 243f4fb2689..5400d6d91cb 100644
--- a/solr/packaging/test/test_config.bats
+++ b/solr/packaging/test/test_config.bats
@@ -54,31 +54,21 @@ teardown() {
 @test "short form of setting property" {
   solr create -c COLL_NAME
 
-  run solr config -c COLL_NAME --property updateHandler.autoCommit.maxDocs -v 
100
+  run solr config -c COLL_NAME --property updateHandler.autoCommit.maxDocs 
--value 100
   assert_output --partial "Successfully set-property 
updateHandler.autoCommit.maxDocs to 100"
-  assert_output --partial "Deprecated for removal since 9.8: Use --value 
instead"
   assert_output --partial "assuming solr url is http://localhost:${SOLR_PORT}.";
 }
 
-# This test is to validate the deprecated and non deprecated options for 
connecting to Solr
 @test "connecting to solr via various solr urls and zk hosts" {
   solr create -c COLL_NAME
 
-  run solr config -c COLL_NAME --property updateHandler.autoCommit.maxDocs -v 
100 -solrUrl http://localhost:${SOLR_PORT}
+  run solr config -c COLL_NAME --property updateHandler.autoCommit.maxDocs 
--value 100 -s http://localhost:${SOLR_PORT}
   assert_output --partial "Successfully set-property 
updateHandler.autoCommit.maxDocs to 100"
-  assert_output --partial "Deprecated for removal since 9.7: Use --solr-url 
instead"
 
-  run solr config -c COLL_NAME --property updateHandler.autoCommit.maxDocs -v 
100 --solr-url http://localhost:${SOLR_PORT}
+  run solr config -c COLL_NAME --property updateHandler.autoCommit.maxDocs 
--value 100 -z localhost:${ZK_PORT}
   assert_output --partial "Successfully set-property 
updateHandler.autoCommit.maxDocs to 100"
 
-  run solr config -c COLL_NAME --property updateHandler.autoCommit.maxDocs -v 
100 -zkHost localhost:${ZK_PORT}
-  assert_output --partial "Successfully set-property 
updateHandler.autoCommit.maxDocs to 100"
-  assert_output --partial "Deprecated for removal since 9.7: Use --zk-host 
instead"
-
-  run solr config -c COLL_NAME --property updateHandler.autoCommit.maxDocs -v 
100 -z localhost:${ZK_PORT}
-  assert_output --partial "Successfully set-property 
updateHandler.autoCommit.maxDocs to 100"
-
-  run solr config -c COLL_NAME --property updateHandler.autoCommit.maxDocs -v 
100 --zk-host localhost:${ZK_PORT}
+  run solr config -c COLL_NAME --property updateHandler.autoCommit.maxDocs 
--value 100 --zk-host localhost:${ZK_PORT}
   assert_output --partial "Successfully set-property 
updateHandler.autoCommit.maxDocs to 100"
 
 }
diff --git a/solr/packaging/test/test_post.bats 
b/solr/packaging/test/test_post.bats
index 016dba34d36..277631297f9 100644
--- a/solr/packaging/test/test_post.bats
+++ b/solr/packaging/test/test_post.bats
@@ -39,7 +39,7 @@ teardown() {
 @test "Check help command" {
 
   run solr post
-  assert_output --partial 'Must specify either --solr-update-url or -c 
parameter'
+  assert_output --partial 'Missing required option: c'
 
   run solr post -h
   assert_output --partial 'usage: bin/solr post'
@@ -57,7 +57,7 @@ teardown() {
   run solr create -c monitors -d _default
   assert_output --partial "Created collection 'monitors'"
 
-  run solr post --type application/xml --solr-update-url 
http://localhost:${SOLR_PORT}/solr/monitors/update 
${SOLR_TIP}/example/exampledocs/monitor.xml
+  run solr post --type application/xml --solr-url 
http://localhost:${SOLR_PORT} -c monitors 
${SOLR_TIP}/example/exampledocs/monitor.xml
 
   assert_output --partial '1 files indexed.'
   refute_output --partial 'ERROR'
@@ -89,7 +89,7 @@ teardown() {
 
   solr create -c monitors_no_type -d _default
 
-  run solr post --solr-update-url 
http://localhost:${SOLR_PORT}/solr/monitors_no_type/update 
${SOLR_TIP}/example/exampledocs/monitor.xml
+  run solr post --solr-url http://localhost:${SOLR_PORT} -c monitors_no_type 
${SOLR_TIP}/example/exampledocs/monitor.xml
 
   assert_output --partial '1 files indexed.'
   refute_output --partial 'ERROR'
@@ -98,7 +98,7 @@ teardown() {
 
   solr create -c books_no_type -d _default
 
-  run solr post --solr-update-url 
http://localhost:${SOLR_PORT}/solr/books_no_type/update 
${SOLR_TIP}/example/exampledocs/books.json
+  run solr post --solr-url http://localhost:${SOLR_PORT} -c books_no_type 
${SOLR_TIP}/example/exampledocs/books.json
 
   assert_output --partial '1 files indexed.'
   refute_output --partial 'ERROR'
@@ -107,7 +107,7 @@ teardown() {
 
   solr create -c books_csv_no_type -d _default
 
-  run solr post --solr-update-url 
http://localhost:${SOLR_PORT}/solr/books_csv_no_type/update 
${SOLR_TIP}/example/exampledocs/books.csv
+  run solr post --solr-url http://localhost:${SOLR_PORT} -c books_csv_no_type 
${SOLR_TIP}/example/exampledocs/books.csv
 
   assert_output --partial '1 files indexed.'
   refute_output --partial 'ERROR'
@@ -118,7 +118,7 @@ teardown() {
 @test "crawling a directory as a dry-run" {
 
   # We filter to xml,json,and csv as we don't want to invoke the Extract 
handler, and are running it as a dry run
-  run solr post --dry-run --filetypes xml,json,csv --solr-update-url 
http://localhost:${SOLR_PORT}/solr/foobar/update --skip-commit 
${SOLR_TIP}/example/exampledocs
+  run solr post --dry-run --filetypes xml,json,csv --solr-url 
http://localhost:${SOLR_PORT} -c foobar --skip-commit 
${SOLR_TIP}/example/exampledocs
 
   assert_output --partial 'Dry run complete. 16 would have been indexed.'
   refute_output --partial '16 files indexed.'
@@ -130,7 +130,7 @@ teardown() {
   solr create -c mixed_content -d _default
 
   # We filter to xml,json,and csv as we don't want to invoke the Extract 
handler.
-  run solr post --filetypes xml,json,csv --solr-update-url 
http://localhost:${SOLR_PORT}/solr/mixed_content/update 
${SOLR_TIP}/example/exampledocs
+  run solr post --filetypes xml,json,csv --solr-url 
http://localhost:${SOLR_PORT} -c mixed_content ${SOLR_TIP}/example/exampledocs
 
   assert_output --partial '16 files indexed.'
   refute_output --partial 'ERROR'
@@ -150,7 +150,7 @@ teardown() {
     }
   }' "http://localhost:${SOLR_PORT}/solr/webcrawl/config";
 
-  run solr post --mode web --solr-update-url 
http://localhost:${SOLR_PORT}/webcrawl/update --recursive 1 --delay 1 
https://solr.apache.org
+  run solr post --mode web -c webcrawl --recursive 1 --delay 1 
https://solr.apache.org
   assert_output --partial 'Entering crawl at level 0'
 }
 
@@ -159,7 +159,7 @@ teardown() {
   run solr create -c monitors2 -d _default
   assert_output --partial "Created collection 'monitors2'"
 
-  run solr post --solr-update-url 
http://localhost:${SOLR_PORT}/solr/monitors2/update --type application/xml 
--skip-commit --optimize ${SOLR_TIP}/example/exampledocs/monitor.xml
+  run solr post --solr-url http://localhost:${SOLR_PORT} -c monitors2 --type 
application/xml --skip-commit --optimize 
${SOLR_TIP}/example/exampledocs/monitor.xml
 
   assert_output --partial '1 files indexed.'
   refute_output --partial 'COMMITting Solr index'
@@ -173,18 +173,18 @@ teardown() {
   run solr create -c test_args -d _default
   assert_output --partial "Created collection 'test_args'"
 
-  run solr post --solr-update-url 
http://localhost:${SOLR_PORT}/solr/test_args/update --mode args --type 
application/xml --out "<delete><query>*:*</query></delete>"
+  run solr post --solr-url http://localhost:${SOLR_PORT} -c test_args --mode 
args --type application/xml --verbose "<delete><query>*:*</query></delete>"
   assert_output --partial '<int name="status">0</int>'
 
   # confirm default type
-  run solr post --solr-update-url 
http://localhost:${SOLR_PORT}/solr/test_args/update --mode args --out 
"{'delete': {'query': '*:*'}}"
+  run solr post --solr-url http://localhost:${SOLR_PORT} -c test_args --mode 
args --verbose "{'delete': {'query': '*:*'}}"
   assert_output --partial '"status":0'
 
-  # confirm we don't get back output without --out
-  run solr post --solr-update-url 
http://localhost:${SOLR_PORT}/solr/test_args/update --mode args "{'delete': 
{'query': '*:*'}}"
+  # confirm we don't get back output without --verbose
+  run solr post --solr-url http://localhost:${SOLR_PORT} -c test_args --mode 
args "{'delete': {'query': '*:*'}}"
   refute_output --partial '"status":0'
 
-  run solr post --solr-update-url 
http://localhost:${SOLR_PORT}/solr/test_args/update --mode args --type text/csv 
--out $'id,value\nROW1,0.47'
+  run solr post --solr-url http://localhost:${SOLR_PORT} -c test_args --mode 
args --type text/csv --verbose $'id,value\nROW1,0.47'
   assert_output --partial '"status":0'
   run curl "http://localhost:${SOLR_PORT}/solr/test_args/select?q=id:ROW1";
   assert_output --partial '"numFound":1'
@@ -192,7 +192,7 @@ teardown() {
 
 # function used because run echo | solr ends up being (run echo) | solr and we 
loose the output capture.
 capture_echo_to_solr() {
-  echo "{'commit': {}}" | solr post --solr-update-url 
http://localhost:${SOLR_PORT}/solr/test_stdin/update --mode stdin --type 
application/json --out
+  echo "{'commit': {}}" | solr post --solr-url http://localhost:${SOLR_PORT} 
-c test_stdin --mode stdin --type application/json --verbose
 }
 
 @test "stdin mode" {
@@ -209,7 +209,7 @@ capture_echo_to_solr() {
   run solr create -c monitors_verbose -d _default
   assert_output --partial "Created collection 'monitors_verbose'"
 
-  run solr post --verbose --type application/xml --solr-update-url 
http://localhost:${SOLR_PORT}/solr/monitors_verbose/update 
${SOLR_TIP}/example/exampledocs/monitor.xml
+  run solr post --verbose --type application/xml --solr-url 
http://localhost:${SOLR_PORT} -c monitors_verbose 
${SOLR_TIP}/example/exampledocs/monitor.xml
 
   assert_output --partial '1 files indexed.'
   assert_output --partial '<lst name="responseHeader">'
diff --git a/solr/packaging/test/test_postlogs.bats 
b/solr/packaging/test/test_postlogs.bats
index ef6fe76953f..76893566d43 100644
--- a/solr/packaging/test/test_postlogs.bats
+++ b/solr/packaging/test/test_postlogs.bats
@@ -42,7 +42,7 @@ teardown() {
   run solr create -c COLL_NAME
   assert_output --partial "Created collection 'COLL_NAME'"
 
-  run solr postlogs -url http://localhost:${SOLR_PORT}/solr/COLL_NAME -rootdir 
${SOLR_LOGS_DIR}/solr.log
+  run solr postlogs --solr-url http://localhost:${SOLR_PORT} -c COLL_NAME 
-rootdir ${SOLR_LOGS_DIR}/solr.log
   assert_output --partial 'Sending last batch'
   assert_output --partial 'Committed'
 
diff --git a/solr/packaging/test/test_prometheus.bats 
b/solr/packaging/test/test_prometheus.bats
index a6dc1c2671d..b9d2689ab79 100644
--- a/solr/packaging/test/test_prometheus.bats
+++ b/solr/packaging/test/test_prometheus.bats
@@ -37,8 +37,8 @@ teardown() {
   run solr create -c COLL_NAME
   assert_output --partial "Created new core 'COLL_NAME'"
  
-  echo "# starting solr-exporter on ${SOLR_EXPORTER_PORT}" >&3
-  run solr-exporter --cluster-id bats-test -p $SOLR_EXPORTER_PORT -b 
http://localhost:${SOLR_PORT}/solr >&3 &
+  # echo "# starting solr-exporter on ${SOLR_EXPORTER_PORT}" >&3
+  run solr-exporter --cluster-id bats-test -p $SOLR_EXPORTER_PORT --solr-url 
http://localhost:${SOLR_PORT}/solr >&3 &
 
   sleep 5
 
diff --git a/solr/packaging/test/test_snapshots.bats 
b/solr/packaging/test/test_snapshots.bats
index c8dd9da8d4c..5bceed84863 100644
--- a/solr/packaging/test/test_snapshots.bats
+++ b/solr/packaging/test/test_snapshots.bats
@@ -26,7 +26,7 @@ setup_file() {
 
 teardown_file() {
   common_setup
-  solr stop -all
+  solr stop --all
 
 }
 
@@ -59,15 +59,16 @@ teardown() {
 @test "snapshot list" {  
   solr snapshot-create -c films --snapshot-name snapshot3 --solr-url 
http://localhost:${SOLR_PORT}
   
-  run solr snapshot-list -c films -url http://localhost:${SOLR_PORT}/solr
+  # Confirm that we continue to normalize away the /solr ending.
+  run solr snapshot-list -c films -s http://localhost:${SOLR_PORT}/solr
   assert_output --partial "snapshot3"
   
-  run solr snapshot-delete -c films --snapshot-name snapshot3 -url 
http://localhost:${SOLR_PORT}
+  run solr snapshot-delete -c films --snapshot-name snapshot3 -s 
http://localhost:${SOLR_PORT}
   assert_output --partial "Successfully deleted snapshot with name snapshot3 
for collection films"
 }
 
 @test "snapshot describe" {  
-  solr snapshot-create -c films --snapshot-name snapshot4 -url 
http://localhost:${SOLR_PORT}
+  solr snapshot-create -c films --snapshot-name snapshot4 -s 
http://localhost:${SOLR_PORT}
   
   run solr snapshot-describe -c films --snapshot-name snapshot4
   assert_output --partial "Name: snapshot4"
diff --git a/solr/packaging/test/test_ssl.bats 
b/solr/packaging/test/test_ssl.bats
index 3d13a16b5db..25615a6fd03 100644
--- a/solr/packaging/test/test_ssl.bats
+++ b/solr/packaging/test/test_ssl.bats
@@ -533,8 +533,7 @@ teardown() {
   export SOLR_SSL_KEY_STORE=$ssl_dir/server2.keystore.p12
   export SOLR_SSL_TRUST_STORE=$ssl_dir/server2.keystore.p12
   
-  # leaving -a instead of --jvm-opts for back compat testing.
-  solr start -z localhost:${ZK_PORT} -p ${SOLR2_PORT} -a 
"-Dsolr.jetty.sslContext.reload.scanInterval=1 -DsocketTimeout=5000"
+  solr start -z localhost:${ZK_PORT} -p ${SOLR2_PORT} --jvm-opts 
"-Dsolr.jetty.sslContext.reload.scanInterval=1 -DsocketTimeout=5000"
   solr assert --started https://localhost:${SOLR2_PORT} --timeout 5000
 
   # "test" collection is two shards, meaning there must be communication 
between shards for queries (handled by http shard handler factory)
diff --git a/solr/packaging/test/test_version.bats 
b/solr/packaging/test/test_version.bats
index edfebd34663..f4d888033e6 100644
--- a/solr/packaging/test/test_version.bats
+++ b/solr/packaging/test/test_version.bats
@@ -21,22 +21,14 @@ setup() {
   common_clean_setup
 }
 
-@test "--version and -v both return Solr version" {
+@test "--version returns Solr version" {
   run solr --version
-  assert_output --partial "Solr version is:"
-  
-  run solr -v
-  assert_output --partial "Solr version is:"
-  
+  assert_output --partial "Solr version is:"    
 }
 
-@test "-version and version both return Solr version and deprecation" {
-  run solr -version
-  assert_output --partial "Solr version is:"
-  assert_output --partial "Deprecated operation as of 9.8.  Please use 
bin/solr --version."
-  
+@test "version as direct tool call still runs" {  
+  #run ! solr version
+  #assert_output --partial "version is not a valid command!  Did you mean 
--version?"  
   run solr version
   assert_output --partial "Solr version is:"
-  assert_output --partial "Deprecated operation as of 9.8.  Please use 
bin/solr --version."
-  
 }
diff --git a/solr/packaging/test/test_zk.bats b/solr/packaging/test/test_zk.bats
index c6a6b184028..240fb072b31 100644
--- a/solr/packaging/test/test_zk.bats
+++ b/solr/packaging/test/test_zk.bats
@@ -66,18 +66,11 @@ teardown() {
 
 @test "connecting to solr via various solr urls and zk hosts" {
   sleep 1
-  run solr zk ls / -solrUrl http://localhost:${SOLR_PORT}
-  assert_output --partial "aliases.json"
-  # We do mapping in bin/solr script from -solrUrl to --solr-url that prevents 
deprecation warning
-  #assert_output --partial "Deprecated for removal since 9.7: Use --solr-url 
instead"
-
-  run solr zk ls / -url http://localhost:${SOLR_PORT}
-  assert_output --partial "aliases.json"
-  # We do mapping in bin/solr script from -solrUrl to --solr-url that prevents 
deprecation warning
-  #assert_output --partial "Deprecated for removal since 9.7: Use --solr-url 
instead"
-
   run solr zk ls / --solr-url http://localhost:${SOLR_PORT}
   assert_output --partial "aliases.json"
+ 
+  run solr zk ls / -s http://localhost:${SOLR_PORT}
+  assert_output --partial "aliases.json"
 
   run solr zk ls /
   assert_output --partial "aliases.json"
@@ -87,11 +80,6 @@ teardown() {
 
   run solr zk ls / --zk-host localhost:${ZK_PORT}
   assert_output --partial "aliases.json"
-
-  run solr zk ls / -zkHost localhost:${ZK_PORT}
-  assert_output --partial "aliases.json"
-  # We do mapping in bin/solr script from -zkHost to --zk-host that prevents 
deprecation warning
-  #assert_output --partial "Deprecated for removal since 9.7: Use --zk-host 
instead"
 }
 
 @test "copying files around" {
diff --git a/solr/prometheus-exporter/bin/solr-exporter 
b/solr/prometheus-exporter/bin/solr-exporter
index 452e597ab55..20377c4b171 100755
--- a/solr/prometheus-exporter/bin/solr-exporter
+++ b/solr/prometheus-exporter/bin/solr-exporter
@@ -120,9 +120,9 @@ if [[ -n "$NUM_THREADS" ]]; then
 fi
 
 if [[ -n "$ZK_HOST" ]]; then
-  EXPORTER_ARGS+=(-z "$ZK_HOST")
+  EXPORTER_ARGS+=(--zk-host "$ZK_HOST")
 elif [[ -n "$SOLR_URL" ]]; then
-  EXPORTER_ARGS+=(-b "$SOLR_URL")
+  EXPORTER_ARGS+=(--solr-url "$SOLR_URL")
 fi
 
 if [[ -n "$CLUSTER_ID" ]]; then
@@ -130,11 +130,11 @@ if [[ -n "$CLUSTER_ID" ]]; then
 fi
 
 if [[ -n "$CREDENTIALS" ]]; then
-  EXPORTER_ARGS+=(-u "$CREDENTIALS")
+  EXPORTER_ARGS+=(--credentials "$CREDENTIALS")
 fi
 
 if [[ -n "$SSL_ENABLED" ]]; then
-  EXPORTER_ARGS+=(-ssl "$SSL_ENABLED")
+  EXPORTER_ARGS+=(--ssl-enabled "$SSL_ENABLED")
 fi
 
 exec "$JAVACMD" \
diff --git a/solr/prometheus-exporter/bin/solr-exporter.cmd 
b/solr/prometheus-exporter/bin/solr-exporter.cmd
index 7e9dd2a91f2..c55133db616 100644
--- a/solr/prometheus-exporter/bin/solr-exporter.cmd
+++ b/solr/prometheus-exporter/bin/solr-exporter.cmd
@@ -80,11 +80,11 @@ IF NOT "%CONFIG_FILE%"=="" set 
EXPORTER_ARGS=%EXPORTER_ARGS% --config-file %CONF
 IF NOT "%PORT%"=="" set EXPORTER_ARGS=%EXPORTER_ARGS% -p %PORT%
 IF NOT "%SCRAPE_INTERVAL%"=="" set EXPORTER_ARGS=%EXPORTER_ARGS% 
--scrape-interval %SCRAPE_INTERVAL%
 IF NOT "%NUM_THREADS%"=="" set EXPORTER_ARGS=%EXPORTER_ARGS% --num-threads 
%NUM_THREADS%
-IF NOT "%ZK_HOST%"=="" set EXPORTER_ARGS=%EXPORTER_ARGS% -z %ZK_HOST%
-IF NOT "%SOLR_URL%"=="" set EXPORTER_ARGS=%EXPORTER_ARGS% -b %SOLR_URL%
+IF NOT "%ZK_HOST%"=="" set EXPORTER_ARGS=%EXPORTER_ARGS% --zk-host %ZK_HOST%
+IF NOT "%SOLR_URL%"=="" set EXPORTER_ARGS=%EXPORTER_ARGS% --solr-url %SOLR_URL%
 IF NOT "%CLUSTER_ID%"=="" set EXPORTER_ARGS=%EXPORTER_ARGS% --cluster-id 
"%CLUSTER_ID%"
-IF NOT "%CREDENTIALS%"=="" set EXPORTER_ARGS=%EXPORTER_ARGS% -u "%CREDENTIALS%"
-IF NOT "%SSL_ENABLED%"=="" set EXPORTER_ARGS=%EXPORTER_ARGS% -ssl 
"%SSL_ENABLED%"
+IF NOT "%CREDENTIALS%"=="" set EXPORTER_ARGS=%EXPORTER_ARGS% --credentials 
"%CREDENTIALS%"
+IF NOT "%SSL_ENABLED%"=="" set EXPORTER_ARGS=%EXPORTER_ARGS% --ssl-enabled 
"%SSL_ENABLED%"
 goto endInit
 
 @REM Reaching here means variables are defined and arguments have been captured
diff --git 
a/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/SolrExporter.java
 
b/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/SolrExporter.java
index 2a839b0c794..ef24cda66a2 100644
--- 
a/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/SolrExporter.java
+++ 
b/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/SolrExporter.java
@@ -26,7 +26,6 @@ import java.util.concurrent.ExecutorService;
 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;
@@ -35,7 +34,6 @@ import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.solr.common.util.ExecutorUtil;
 import org.apache.solr.common.util.IOUtils;
 import org.apache.solr.common.util.SolrNamedThreadFactory;
-import org.apache.solr.common.util.StrUtils;
 import org.apache.solr.prometheus.collector.MetricsCollectorFactory;
 import org.apache.solr.prometheus.collector.SchedulerMetricsCollector;
 import org.apache.solr.prometheus.scraper.SolrCloudScraper;
@@ -51,7 +49,6 @@ public class SolrExporter {
   private static final int DEFAULT_PORT = 8989;
   private static final String DEFAULT_BASE_URL = "http://localhost:8983/solr";;
   private static final String DEFAULT_ZK_HOST = "";
-  private static final String DEFAULT_CLUSTER_ID = "";
   private static final String DEFAULT_CONFIG = "solr-exporter-config.xml";
   private static final int DEFAULT_SCRAPE_INTERVAL = 60;
   private static final Integer DEFAULT_NUM_THREADS = 1;
@@ -143,36 +140,17 @@ public class SolrExporter {
 
   public static void main(String[] args) {
     Options mainOptions = new Options();
-    Options deprecatedOptions = new Options();
 
-    // Change to -s and --solr-url in main once deprecated -s flag for 
--scrape-interval is removed.
-    Option baseUrlOption =
-        Option.builder("b")
-            .longOpt("base-url")
-            .hasArg()
-            .argName("BASE_URL")
-            .type(String.class)
-            .desc(
-                "Specify the Solr base URL when connecting to Solr in 
standalone mode. If omitted both the -b parameter and the -z parameter, connect 
to http://localhost:8983/solr. For example 'http://localhost:8983/solr'.")
-            .build();
-    mainOptions.addOption(baseUrlOption);
-
-    Option baseUrlDepOption =
-        Option.builder()
-            .longOpt("baseUrl")
+    Option solrUrlOption =
+        Option.builder("s")
+            .longOpt("solr-url")
             .hasArg()
             .argName("BASE_URL")
             .type(String.class)
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.7")
-                    .setDescription("Use --base-url instead")
-                    .get())
             .desc(
                 "Specify the Solr base URL when connecting to Solr in 
standalone mode. If omitted both the -b parameter and the -z parameter, connect 
to http://localhost:8983/solr. For example 'http://localhost:8983/solr'.")
             .build();
-    deprecatedOptions.addOption(baseUrlDepOption);
+    mainOptions.addOption(solrUrlOption);
 
     Option configOption =
         Option.builder()
@@ -182,21 +160,8 @@ public class SolrExporter {
             .type(String.class)
             .desc("Specify the configuration file; the default is " + 
DEFAULT_CONFIG + ".")
             .build();
-    Option configOptionDeprecated =
-        Option.builder("f")
-            .hasArg()
-            .argName("CONFIG")
-            .type(String.class)
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --config-file instead")
-                    .get())
-            .desc("Specify the configuration file; the default is " + 
DEFAULT_CONFIG + ".")
-            .build();
+
     mainOptions.addOption(configOption);
-    mainOptions.addOption(configOptionDeprecated);
 
     Option helpOption =
         Option.builder("h").longOpt("help").desc("Prints this help 
message.").build();
@@ -213,22 +178,6 @@ public class SolrExporter {
             .build();
     mainOptions.addOption(clusterIdOption);
 
-    Option clusterIdDepOption =
-        Option.builder("i")
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --cluster-id instead")
-                    .get())
-            .hasArg()
-            .argName("CLUSTER_ID")
-            .type(String.class)
-            .desc(
-                "Specify a unique identifier for the cluster, which can be 
used to select between multiple clusters in Grafana. By default this ID will be 
equal to a hash of the -b or -z argument")
-            .build();
-    deprecatedOptions.addOption(clusterIdDepOption);
-
     Option numThreadsOption =
         Option.builder()
             .longOpt("num-threads")
@@ -241,23 +190,6 @@ public class SolrExporter {
                     + ".")
             .build();
     mainOptions.addOption(numThreadsOption);
-    Option numThreadsOptionDeprecated =
-        Option.builder("n")
-            .hasArg()
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --num-threads instead")
-                    .get())
-            .argName("NUM_THREADS")
-            .type(Integer.class)
-            .desc(
-                "Specify the number of threads. solr-exporter creates a thread 
pools for request to Solr. If you need to improve request latency via 
solr-exporter, you can increase the number of threads; the default is "
-                    + DEFAULT_NUM_THREADS
-                    + ".")
-            .build();
-    mainOptions.addOption(numThreadsOptionDeprecated);
 
     Option portOption =
         Option.builder("p")
@@ -282,26 +214,8 @@ public class SolrExporter {
             .build();
     mainOptions.addOption(scrapeIntervalOption);
 
-    Option scrapeIntervalOptionDeprecated =
-        Option.builder("s")
-            .hasArg()
-            .argName("SCRAPE_INTERVAL")
-            .type(Integer.class)
-            .deprecated(
-                DeprecatedAttributes.builder()
-                    .setForRemoval(true)
-                    .setSince("9.8")
-                    .setDescription("Use --scrape-interval instead")
-                    .get())
-            .desc(
-                "Specify the delay between scraping Solr metrics; the default 
is "
-                    + DEFAULT_SCRAPE_INTERVAL
-                    + " seconds.")
-            .build();
-    mainOptions.addOption(scrapeIntervalOptionDeprecated);
-
     Option sslOption =
-        Option.builder("ssl")
+        Option.builder()
             .longOpt("ssl-enabled")
             .type(Boolean.class)
             .desc(
@@ -333,7 +247,6 @@ public class SolrExporter {
 
     Options options = new Options();
     options.addOptions(mainOptions);
-    options.addOptions(deprecatedOptions);
 
     try {
       CommandLineParser parser = new DefaultParser();
@@ -353,12 +266,8 @@ public class SolrExporter {
         String zkHost = commandLine.getOptionValue(zkHostOption, 
DEFAULT_ZK_HOST);
         defaultClusterId = makeShortHash(zkHost);
         scrapeConfiguration = SolrScrapeConfiguration.solrCloud(zkHost);
-      } else if (commandLine.hasOption(baseUrlOption) || 
commandLine.hasOption(baseUrlDepOption)) {
-        log.warn("-b and --base-url will be replaced with -s and --solr-url in 
Solr 10");
-        String baseUrl =
-            commandLine.hasOption(baseUrlOption)
-                ? commandLine.getOptionValue(baseUrlOption)
-                : commandLine.getOptionValue(baseUrlDepOption, 
DEFAULT_BASE_URL);
+      } else if (commandLine.hasOption(solrUrlOption)) {
+        String baseUrl = commandLine.getOptionValue(solrUrlOption);
         defaultClusterId = makeShortHash(baseUrl);
         scrapeConfiguration = SolrScrapeConfiguration.standalone(baseUrl);
       }
@@ -366,18 +275,12 @@ public class SolrExporter {
       if (scrapeConfiguration == null) {
         log.error(
             "Must provide either --{} or --{}",
-            baseUrlOption.getLongOpt(),
+            solrUrlOption.getLongOpt(),
             zkHostOption.getLongOpt());
       }
 
       int port = commandLine.getParsedOptionValue(portOption, DEFAULT_PORT);
-      String clusterId = commandLine.getOptionValue(clusterIdOption, 
DEFAULT_CLUSTER_ID);
-      if (commandLine.hasOption("i")) {
-        clusterId = commandLine.getOptionValue("i");
-      }
-      if (StrUtils.isNullOrEmpty(clusterId)) {
-        clusterId = defaultClusterId;
-      }
+      String clusterId = commandLine.getOptionValue(clusterIdOption, 
defaultClusterId);
 
       if (commandLine.hasOption(credentialsOption)) {
         String credentials = commandLine.getOptionValue(credentialsOption, 
DEFAULT_CREDENTIALS);
@@ -397,25 +300,10 @@ public class SolrExporter {
             getSystemVariable("SOLR_SSL_TRUST_STORE_PASSWORD"));
       }
 
-      String configFile = DEFAULT_CONFIG;
-      if (commandLine.hasOption(configOptionDeprecated)) {
-        configFile = commandLine.getOptionValue(configOptionDeprecated);
-      } else if (commandLine.hasOption(configOption)) {
-        configFile = commandLine.getOptionValue(configOption);
-      }
-      int numberOfThreads = DEFAULT_NUM_THREADS;
-      if (commandLine.hasOption("num-threads")) {
-        numberOfThreads = commandLine.getParsedOptionValue("num-threads");
-      } else if (commandLine.hasOption("n")) {
-        numberOfThreads = commandLine.getParsedOptionValue("n");
-      }
-
-      int scrapeInterval = DEFAULT_SCRAPE_INTERVAL;
-      if (commandLine.hasOption("s")) {
-        scrapeInterval = 
commandLine.getParsedOptionValue(scrapeIntervalOptionDeprecated);
-      } else if (commandLine.hasOption("scrape-interval")) {
-        scrapeInterval = 
commandLine.getParsedOptionValue(scrapeIntervalOption);
-      }
+      String configFile = commandLine.getOptionValue(configOption, 
DEFAULT_CONFIG);
+      int numberOfThreads = commandLine.getParsedOptionValue("num-threads", 
DEFAULT_NUM_THREADS);
+      int scrapeInterval =
+          commandLine.getParsedOptionValue(scrapeIntervalOption, 
DEFAULT_SCRAPE_INTERVAL);
 
       SolrExporter solrExporter =
           new SolrExporter(
diff --git 
a/solr/solr-ref-guide/modules/deployment-guide/pages/enabling-ssl.adoc 
b/solr/solr-ref-guide/modules/deployment-guide/pages/enabling-ssl.adoc
index 34d540975a6..24704e8037b 100644
--- a/solr/solr-ref-guide/modules/deployment-guide/pages/enabling-ssl.adoc
+++ b/solr/solr-ref-guide/modules/deployment-guide/pages/enabling-ssl.adoc
@@ -236,7 +236,7 @@ The examples below use the `bin/solr` tool that comes with 
Solr to do this.
 ====
 [source,terminal]
 ----
-$ bin/solr cluster --property urlSchema --value https -z 
server1:2181,server2:2181,server3:2181
+$ bin/solr cluster --property urlSchema --value https --zk-host 
server1:2181,server2:2181,server3:2181
 ----
 ====
 
@@ -245,12 +245,12 @@ Windows::
 ====
 [source,powershell]
 ----
-C:\> bin/solr.cmd --property urlSchema --value https -z 
server1:2181,server2:2181,server3:2181
+C:\> bin/solr.cmd --property urlSchema --value https --zk-host 
server1:2181,server2:2181,server3:2181
 ----
 ====
 ======
 
-Be sure to use the correct `zkhost` value for your system.
+Be sure to use the correct `--zk-host` value for your system.
 If you have set up your ZooKeeper ensemble to use a 
xref:taking-solr-to-production.adoc#zookeeper-chroot[chroot for Solr], make 
sure to include it in the `zkHost` string, e.g., `--zk-host 
server1:2181,server2:2181,server3:2181/solr`.
 
 === Update Cluster Properties for Existing Collections
diff --git 
a/solr/solr-ref-guide/modules/deployment-guide/pages/monitoring-with-prometheus-and-grafana.adoc
 
b/solr/solr-ref-guide/modules/deployment-guide/pages/monitoring-with-prometheus-and-grafana.adoc
index 898be24b339..006888ede88 100644
--- 
a/solr/solr-ref-guide/modules/deployment-guide/pages/monitoring-with-prometheus-and-grafana.adoc
+++ 
b/solr/solr-ref-guide/modules/deployment-guide/pages/monitoring-with-prometheus-and-grafana.adoc
@@ -62,7 +62,7 @@ Linux::
 [source,bash]
 ----
 $ cd prometheus-exporter
-$ ./bin/solr-exporter -p 9854 -b http://localhost:8983/solr --config-file 
./conf/solr-exporter-config.xml --num-threads 8
+$ ./bin/solr-exporter -p 9854 --solr-url http://localhost:8983/solr 
--config-file ./conf/solr-exporter-config.xml --num-threads 8
 ----
 
 .SolrCloud
@@ -80,7 +80,7 @@ Windows::
 [source,text]
 ----
 > cd prometheus-exporter
-> .\bin\solr-exporter.cmd -p 9854 -b http://localhost:8983/solr --config-file 
.\conf\solr-exporter-config.xml --num-threads 8
+> .\bin\solr-exporter.cmd -p 9854 --solr-url http://localhost:8983/solr 
--config-file .\conf\solr-exporter-config.xml --num-threads 8
 ----
 
 .SolrCloud
@@ -117,16 +117,16 @@ The port where Prometheus will listen for new data.
 This port will be used to configure Prometheus.
 It can be any port not already in use on your server.
 
-`-b`, `--baseurl`, `$SOLR_URL`::
+`-s`, `--solr-url`, `$SOLR_URL`::
 +
 [%autowidth,frame=none]
 |===
 |Optional |Default: _see description_
 |===
 +
-The Solr base URL (such as `\http://localhost:8983/solr`) when Solr is running 
in a  The Solr base URL (such as `\http://localhost:8983/solr`) when Solr is 
running in a user-managed cluster or a single-node installation.
+The Solr base URL (such as `http://localhost:8983/solr`) when Solr is running 
in a user-managed cluster or a single-node installation.
 If you are running SolrCloud, do not specify this parameter.
-If neither the `-b` parameter nor the `-z` parameter are defined, the default 
is `-b \http://localhost:8983/solr`.
+If neither the `-s` parameter nor the `-z` parameter are defined, the default 
is `--solr-url http://localhost:8983/solr`.
 
 `-z`, `--zk-host`, `$ZK_HOST`::
 +
@@ -137,7 +137,7 @@ If neither the `-b` parameter nor the `-z` parameter are 
defined, the default is
 +
 The ZooKeeper connect string (such as `localhost:9983`, or 
`localhost:2181/solr`) when Solr is running SolrCloud.
 If you are running a user-managed cluster or single-node installation, do not 
specify this parameter.
-If neither the `-b` parameter nor the `-z` parameter are defined, the `-b` 
parameter default is used.
+If neither the `--solr-url` parameter nor the `-z` parameter are defined, the 
`--solr-url` parameter default is used.
 
 `--config-file`, `$CONFIG_FILE`::
 +
@@ -178,7 +178,7 @@ The freshness of the metrics can be improved by reducing 
the scrape interval but
 |Optional |Default: _see description_
 |===
 +
-A unique ID for the cluster to monitor. This ID will be added to all metrics 
as a label `cluster_id` and can be used as a filter in the Grafana dashboard if 
you operate multiple Solr clusters reporting to the same Prometheus instance. 
If this option is omitted, a hash of the `baseUrl` or `zkHost` will be used as 
ID by default.
+A unique ID for the cluster to monitor. This ID will be added to all metrics 
as a label `cluster_id` and can be used as a filter in the Grafana dashboard if 
you operate multiple Solr clusters reporting to the same Prometheus instance. 
If this option is omitted, a hash of the `--solr-url` or `--zk-host` will be 
used as ID by default.
 
 `-u`, `--credentials`, `$CREDENTIALS`::
 +
@@ -190,7 +190,7 @@ A unique ID for the cluster to monitor. This ID will be 
added to all metrics as
 Specify the credentials in the format `username:password`. Example: 
`--credentials solr:SolrRocks`.
 
 
-`-ssl`, `--ssl-enabled`, `$SSL_ENABLED`::
+`--ssl-enabled`, `$SSL_ENABLED`::
 +
 [%autowidth,frame=none]
 |===

Reply via email to