diff --git a/changelog/unreleased/SOLR-18234-solr-cli-reorganise.yml b/changelog/unreleased/SOLR-18234-solr-cli-reorganise.yml new file mode 100644 index 000000000000..7be1a5ae2717 --- /dev/null +++ b/changelog/unreleased/SOLR-18234-solr-cli-reorganise.yml @@ -0,0 +1,7 @@ +title: Reorganize org.apache.solr.cli into domain-based sub-packages +type: other +authors: + - name: Jalaz Kumar +links: + - name: SOLR-18234 + url: https://issues.apache.org/jira/browse/SOLR-18234 diff --git a/solr/core/src/java/org/apache/solr/cli/CLIUtils.java b/solr/core/src/java/org/apache/solr/cli/CLIUtils.java index 1a8f76c0db8b..9ae167958a2b 100644 --- a/solr/core/src/java/org/apache/solr/cli/CLIUtils.java +++ b/solr/core/src/java/org/apache/solr/cli/CLIUtils.java @@ -33,6 +33,7 @@ import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.exec.OS; +import org.apache.solr.cli.tools.cluster.StatusTool; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.CloudSolrClient; 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 263fb7a7da23..7c5464f8fac5 100755 --- a/solr/core/src/java/org/apache/solr/cli/SolrCLI.java +++ b/solr/core/src/java/org/apache/solr/cli/SolrCLI.java @@ -42,6 +42,36 @@ import org.apache.commons.cli.help.HelpFormatter; import org.apache.commons.cli.help.TableDefinition; import org.apache.commons.cli.help.TextHelpAppendable; +import org.apache.solr.cli.tools.ApiTool; +import org.apache.solr.cli.tools.AssertTool; +import org.apache.solr.cli.tools.AuthTool; +import org.apache.solr.cli.tools.ConfigTool; +import org.apache.solr.cli.tools.CreateTool; +import org.apache.solr.cli.tools.DeleteTool; +import org.apache.solr.cli.tools.ExportTool; +import org.apache.solr.cli.tools.PackageTool; +import org.apache.solr.cli.tools.PostLogsTool; +import org.apache.solr.cli.tools.PostTool; +import org.apache.solr.cli.tools.RunExampleTool; +import org.apache.solr.cli.tools.StreamTool; +import org.apache.solr.cli.tools.VersionTool; +import org.apache.solr.cli.tools.cluster.ClusterTool; +import org.apache.solr.cli.tools.cluster.HealthcheckTool; +import org.apache.solr.cli.tools.cluster.StatusTool; +import org.apache.solr.cli.tools.snapshot.SnapshotCreateTool; +import org.apache.solr.cli.tools.snapshot.SnapshotDeleteTool; +import org.apache.solr.cli.tools.snapshot.SnapshotDescribeTool; +import org.apache.solr.cli.tools.snapshot.SnapshotExportTool; +import org.apache.solr.cli.tools.snapshot.SnapshotListTool; +import org.apache.solr.cli.tools.zk.ConfigSetDownloadTool; +import org.apache.solr.cli.tools.zk.ConfigSetUploadTool; +import org.apache.solr.cli.tools.zk.UpdateACLTool; +import org.apache.solr.cli.tools.zk.ZkCpTool; +import org.apache.solr.cli.tools.zk.ZkLsTool; +import org.apache.solr.cli.tools.zk.ZkMkrootTool; +import org.apache.solr.cli.tools.zk.ZkMvTool; +import org.apache.solr.cli.tools.zk.ZkRmTool; +import org.apache.solr.cli.tools.zk.ZkToolHelp; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.request.ContentStreamUpdateRequest; import org.apache.solr.common.util.ContentStreamBase; @@ -220,23 +250,6 @@ private static Tool newTool(String toolType, ToolRuntime runtime) throws Excepti throw new IllegalArgumentException(toolType + " is not a valid command!"); } - /** - * 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. - * - *
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, Option opt, Option deprecated, String def) {
- String val = cli.getOptionValue(opt);
- if (val == null) {
- val = cli.getOptionValue(deprecated);
- }
- return val == null ? def : val;
- }
-
// TODO: SOLR-17429 - remove the custom logic when Commons CLI is upgraded and
// makes stderr the default, or makes Option.toDeprecatedString() public.
private static void deprecatedHandlerStdErr(Option o) {
diff --git a/solr/core/src/java/org/apache/solr/cli/SolrProcessManager.java b/solr/core/src/java/org/apache/solr/cli/process/SolrProcessManager.java
similarity index 99%
rename from solr/core/src/java/org/apache/solr/cli/SolrProcessManager.java
rename to solr/core/src/java/org/apache/solr/cli/process/SolrProcessManager.java
index 3001fd2afd53..e310547e9d20 100644
--- a/solr/core/src/java/org/apache/solr/cli/SolrProcessManager.java
+++ b/solr/core/src/java/org/apache/solr/cli/process/SolrProcessManager.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.process;
import static org.apache.solr.servlet.CoreContainerProvider.SOLR_INSTALL_DIR;
diff --git a/solr/core/src/java/org/apache/solr/cli/process/package-info.java b/solr/core/src/java/org/apache/solr/cli/process/package-info.java
new file mode 100644
index 000000000000..a231b83508af
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/cli/process/package-info.java
@@ -0,0 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/** Utilities for discovering and managing Solr OS processes. */
+package org.apache.solr.cli.process;
diff --git a/solr/core/src/java/org/apache/solr/cli/ApiTool.java b/solr/core/src/java/org/apache/solr/cli/tools/ApiTool.java
similarity index 95%
rename from solr/core/src/java/org/apache/solr/cli/ApiTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/ApiTool.java
index 4a9c86fb8485..1479b5e14b86 100644
--- a/solr/core/src/java/org/apache/solr/cli/ApiTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/ApiTool.java
@@ -15,12 +15,16 @@
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools;
import java.net.URI;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.request.GenericSolrRequest;
import org.apache.solr.client.solrj.response.json.JsonMapResponseParser;
diff --git a/solr/core/src/java/org/apache/solr/cli/AssertTool.java b/solr/core/src/java/org/apache/solr/cli/tools/AssertTool.java
similarity index 98%
rename from solr/core/src/java/org/apache/solr/cli/AssertTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/AssertTool.java
index 928065f0a798..4d620259a4de 100644
--- a/solr/core/src/java/org/apache/solr/cli/AssertTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/AssertTool.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools;
import java.io.IOException;
import java.lang.invoke.MethodHandles;
@@ -27,6 +27,12 @@
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionGroup;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIO;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
+import org.apache.solr.cli.tools.cluster.StatusTool;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.request.HealthCheckRequest;
diff --git a/solr/core/src/java/org/apache/solr/cli/AuthTool.java b/solr/core/src/java/org/apache/solr/cli/tools/AuthTool.java
similarity index 98%
rename from solr/core/src/java/org/apache/solr/cli/AuthTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/AuthTool.java
index df0133cfead4..b7cc871975fa 100644
--- a/solr/core/src/java/org/apache/solr/cli/AuthTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/AuthTool.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -37,6 +37,11 @@
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.lucene.util.Constants;
+import org.apache.solr.cli.CLIO;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.util.EnvUtils;
import org.apache.solr.core.SolrCore;
diff --git a/solr/core/src/java/org/apache/solr/cli/ConfigTool.java b/solr/core/src/java/org/apache/solr/cli/tools/ConfigTool.java
similarity index 95%
rename from solr/core/src/java/org/apache/solr/cli/ConfigTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/ConfigTool.java
index a4145168165b..26c3b71bdbdd 100644
--- a/solr/core/src/java/org/apache/solr/cli/ConfigTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/ConfigTool.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools;
import java.util.HashMap;
import java.util.List;
@@ -24,6 +24,11 @@
import org.apache.commons.cli.MissingArgumentException;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.SolrCLI;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.common.util.NamedList;
import org.noggit.CharArr;
diff --git a/solr/core/src/java/org/apache/solr/cli/CreateTool.java b/solr/core/src/java/org/apache/solr/cli/tools/CreateTool.java
similarity index 98%
rename from solr/core/src/java/org/apache/solr/cli/CreateTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/CreateTool.java
index 6b7c6549503f..885c880498c2 100644
--- a/solr/core/src/java/org/apache/solr/cli/CreateTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/CreateTool.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools;
import java.io.IOException;
import java.nio.file.Files;
@@ -27,7 +27,11 @@
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.io.file.PathUtils;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
import org.apache.solr.cli.CommonCLIOptions.DefaultValues;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
diff --git a/solr/core/src/java/org/apache/solr/cli/DeleteTool.java b/solr/core/src/java/org/apache/solr/cli/tools/DeleteTool.java
similarity index 97%
rename from solr/core/src/java/org/apache/solr/cli/DeleteTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/DeleteTool.java
index 59450cf00c14..0f0a99ba1a96 100644
--- a/solr/core/src/java/org/apache/solr/cli/DeleteTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/DeleteTool.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools;
import java.lang.invoke.MethodHandles;
import java.util.Collection;
@@ -25,6 +25,10 @@
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
diff --git a/solr/core/src/java/org/apache/solr/cli/ExportTool.java b/solr/core/src/java/org/apache/solr/cli/tools/ExportTool.java
similarity index 99%
rename from solr/core/src/java/org/apache/solr/cli/ExportTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/ExportTool.java
index 9fb9a23e3d2c..17de8379d8d3 100644
--- a/solr/core/src/java/org/apache/solr/cli/ExportTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/ExportTool.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools;
import static org.apache.solr.common.params.CommonParams.FL;
import static org.apache.solr.common.params.CommonParams.JAVABIN;
@@ -54,6 +54,10 @@
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.lucene.util.SuppressForbidden;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrServerException;
diff --git a/solr/core/src/java/org/apache/solr/cli/PackageTool.java b/solr/core/src/java/org/apache/solr/cli/tools/PackageTool.java
similarity index 98%
rename from solr/core/src/java/org/apache/solr/cli/PackageTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/PackageTool.java
index aaa3649d1be8..e582c0a5cf55 100644
--- a/solr/core/src/java/org/apache/solr/cli/PackageTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/PackageTool.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools;
import static org.apache.solr.cli.SolrCLI.printGreen;
import static org.apache.solr.cli.SolrCLI.printRed;
@@ -32,6 +32,10 @@
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configurator;
import org.apache.lucene.util.SuppressForbidden;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
diff --git a/solr/core/src/java/org/apache/solr/cli/PostLogsTool.java b/solr/core/src/java/org/apache/solr/cli/tools/PostLogsTool.java
similarity index 98%
rename from solr/core/src/java/org/apache/solr/cli/PostLogsTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/PostLogsTool.java
index dd83821ea291..a99ac281f0b6 100644
--- a/solr/core/src/java/org/apache/solr/cli/PostLogsTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/PostLogsTool.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools;
import java.io.BufferedReader;
import java.io.IOException;
@@ -36,6 +36,11 @@
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIO;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.jetty.HttpJettySolrClient;
import org.apache.solr.client.solrj.request.UpdateRequest;
diff --git a/solr/core/src/java/org/apache/solr/cli/PostTool.java b/solr/core/src/java/org/apache/solr/cli/tools/PostTool.java
similarity index 99%
rename from solr/core/src/java/org/apache/solr/cli/PostTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/PostTool.java
index 4975033b8d6e..549917a6cea8 100644
--- a/solr/core/src/java/org/apache/solr/cli/PostTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/PostTool.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools;
import static java.nio.charset.StandardCharsets.US_ASCII;
import static java.nio.charset.StandardCharsets.UTF_8;
@@ -71,6 +71,11 @@
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.io.output.NullOutputStream;
+import org.apache.solr.cli.CLIO;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.api.util.SolrVersion;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
diff --git a/solr/core/src/java/org/apache/solr/cli/RunExampleTool.java b/solr/core/src/java/org/apache/solr/cli/tools/RunExampleTool.java
similarity index 99%
rename from solr/core/src/java/org/apache/solr/cli/RunExampleTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/RunExampleTool.java
index 8db32fc0b66b..efe3599ba313 100644
--- a/solr/core/src/java/org/apache/solr/cli/RunExampleTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/RunExampleTool.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@@ -45,6 +45,13 @@
import org.apache.commons.exec.Executor;
import org.apache.commons.exec.environment.EnvironmentUtils;
import org.apache.commons.io.file.PathUtils;
+import org.apache.solr.cli.CLIO;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.SolrCLI;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
+import org.apache.solr.cli.tools.cluster.StatusTool;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.apache.solr.common.SolrException;
diff --git a/solr/core/src/java/org/apache/solr/cli/StreamTool.java b/solr/core/src/java/org/apache/solr/cli/tools/StreamTool.java
similarity index 98%
rename from solr/core/src/java/org/apache/solr/cli/StreamTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/StreamTool.java
index 31070e7e27b0..8b96fec83bad 100644
--- a/solr/core/src/java/org/apache/solr/cli/StreamTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/StreamTool.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools;
import java.io.BufferedReader;
import java.io.FileInputStream;
@@ -38,6 +38,11 @@
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIO;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.io.SolrClientCache;
import org.apache.solr.client.solrj.io.Tuple;
import org.apache.solr.client.solrj.io.comp.StreamComparator;
diff --git a/solr/core/src/java/org/apache/solr/cli/VersionTool.java b/solr/core/src/java/org/apache/solr/cli/tools/VersionTool.java
similarity index 92%
rename from solr/core/src/java/org/apache/solr/cli/VersionTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/VersionTool.java
index 8bb14172467a..4dad22ebdc62 100644
--- a/solr/core/src/java/org/apache/solr/cli/VersionTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/VersionTool.java
@@ -15,10 +15,14 @@
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.api.util.SolrVersion;
import org.apache.solr.client.solrj.request.SystemInfoRequest;
import org.apache.solr.client.solrj.response.SystemInfoResponse;
diff --git a/solr/core/src/java/org/apache/solr/cli/ClusterTool.java b/solr/core/src/java/org/apache/solr/cli/tools/cluster/ClusterTool.java
similarity index 94%
rename from solr/core/src/java/org/apache/solr/cli/ClusterTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/cluster/ClusterTool.java
index 54626e2b7db7..d3beb816e3e9 100644
--- a/solr/core/src/java/org/apache/solr/cli/ClusterTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/cluster/ClusterTool.java
@@ -15,13 +15,17 @@
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.cluster;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
import org.apache.solr.cloud.ZkController;
import org.apache.solr.common.cloud.ClusterProperties;
diff --git a/solr/core/src/java/org/apache/solr/cli/HealthcheckTool.java b/solr/core/src/java/org/apache/solr/cli/tools/cluster/HealthcheckTool.java
similarity index 97%
rename from solr/core/src/java/org/apache/solr/cli/HealthcheckTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/cluster/HealthcheckTool.java
index 176debbb0b8b..ce49941a23d6 100644
--- a/solr/core/src/java/org/apache/solr/cli/HealthcheckTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/cluster/HealthcheckTool.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.cluster;
import static org.apache.solr.common.params.CommonParams.DISTRIB;
import static org.apache.solr.common.params.CommonParams.NAME;
@@ -30,6 +30,12 @@
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIO;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.SolrCLI;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.apache.solr.client.solrj.jetty.HttpJettySolrClient;
import org.apache.solr.client.solrj.request.SolrQuery;
diff --git a/solr/core/src/java/org/apache/solr/cli/StatusTool.java b/solr/core/src/java/org/apache/solr/cli/tools/cluster/StatusTool.java
similarity index 97%
rename from solr/core/src/java/org/apache/solr/cli/StatusTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/cluster/StatusTool.java
index 27a4840a3a4e..ca17e4b91e34 100644
--- a/solr/core/src/java/org/apache/solr/cli/StatusTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/cluster/StatusTool.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.cluster;
import java.util.Collection;
import java.util.LinkedHashMap;
@@ -29,7 +29,13 @@
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionGroup;
import org.apache.commons.cli.Options;
-import org.apache.solr.cli.SolrProcessManager.SolrProcess;
+import org.apache.solr.cli.CLIO;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
+import org.apache.solr.cli.process.SolrProcessManager;
+import org.apache.solr.cli.process.SolrProcessManager.SolrProcess;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.request.ClusterApi;
import org.apache.solr.client.solrj.request.CollectionsApi;
diff --git a/solr/core/src/java/org/apache/solr/cli/tools/cluster/package-info.java b/solr/core/src/java/org/apache/solr/cli/tools/cluster/package-info.java
new file mode 100644
index 000000000000..7df20c6e5886
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/cli/tools/cluster/package-info.java
@@ -0,0 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/** CLI tools for cluster status, health, and properties. */
+package org.apache.solr.cli.tools.cluster;
diff --git a/solr/core/src/java/org/apache/solr/cli/tools/package-info.java b/solr/core/src/java/org/apache/solr/cli/tools/package-info.java
new file mode 100644
index 000000000000..9b2fe5548c69
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/cli/tools/package-info.java
@@ -0,0 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/** General-purpose Solr CLI tool implementations. */
+package org.apache.solr.cli.tools;
diff --git a/solr/core/src/java/org/apache/solr/cli/SnapshotCreateTool.java b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotCreateTool.java
similarity index 94%
rename from solr/core/src/java/org/apache/solr/cli/SnapshotCreateTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotCreateTool.java
index dfc39bf7cb2d..0fc3fdebcc55 100644
--- a/solr/core/src/java/org/apache/solr/cli/SnapshotCreateTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotCreateTool.java
@@ -14,11 +14,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.snapshot;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.response.CollectionAdminResponse;
diff --git a/solr/core/src/java/org/apache/solr/cli/SnapshotDeleteTool.java b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotDeleteTool.java
similarity index 94%
rename from solr/core/src/java/org/apache/solr/cli/SnapshotDeleteTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotDeleteTool.java
index 00b5c3c01979..6bfc19fd4e6e 100644
--- a/solr/core/src/java/org/apache/solr/cli/SnapshotDeleteTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotDeleteTool.java
@@ -14,11 +14,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.snapshot;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.response.CollectionAdminResponse;
diff --git a/solr/core/src/java/org/apache/solr/cli/SnapshotDescribeTool.java b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotDescribeTool.java
similarity index 96%
rename from solr/core/src/java/org/apache/solr/cli/SnapshotDescribeTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotDescribeTool.java
index 477ad265e7d5..6d4b363ed78b 100644
--- a/solr/core/src/java/org/apache/solr/cli/SnapshotDescribeTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotDescribeTool.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.snapshot;
import java.io.IOException;
import java.text.DateFormat;
@@ -25,6 +25,10 @@
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
diff --git a/solr/core/src/java/org/apache/solr/cli/SnapshotExportTool.java b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotExportTool.java
similarity index 95%
rename from solr/core/src/java/org/apache/solr/cli/SnapshotExportTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotExportTool.java
index d71b8df8b1a2..dddb8fdad53d 100644
--- a/solr/core/src/java/org/apache/solr/cli/SnapshotExportTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotExportTool.java
@@ -14,11 +14,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.snapshot;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.common.params.CollectionAdminParams;
diff --git a/solr/core/src/java/org/apache/solr/cli/SnapshotListTool.java b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotListTool.java
similarity index 93%
rename from solr/core/src/java/org/apache/solr/cli/SnapshotListTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotListTool.java
index 4501fddc8397..877b554262d5 100644
--- a/solr/core/src/java/org/apache/solr/cli/SnapshotListTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotListTool.java
@@ -14,11 +14,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.snapshot;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.response.CollectionAdminResponse;
diff --git a/solr/core/src/java/org/apache/solr/cli/tools/snapshot/package-info.java b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/package-info.java
new file mode 100644
index 000000000000..81e12093e466
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/package-info.java
@@ -0,0 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/** CLI tools for managing Solr collection snapshots. */
+package org.apache.solr.cli.tools.snapshot;
diff --git a/solr/core/src/java/org/apache/solr/cli/ConfigSetDownloadTool.java b/solr/core/src/java/org/apache/solr/cli/tools/zk/ConfigSetDownloadTool.java
similarity index 94%
rename from solr/core/src/java/org/apache/solr/cli/ConfigSetDownloadTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/zk/ConfigSetDownloadTool.java
index 5623794626cb..f80117fdf9bf 100644
--- a/solr/core/src/java/org/apache/solr/cli/ConfigSetDownloadTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/zk/ConfigSetDownloadTool.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.zk;
import java.lang.invoke.MethodHandles;
import java.nio.file.Files;
@@ -22,6 +22,10 @@
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.common.cloud.SolrZkClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/solr/core/src/java/org/apache/solr/cli/ConfigSetUploadTool.java b/solr/core/src/java/org/apache/solr/cli/tools/zk/ConfigSetUploadTool.java
similarity index 95%
rename from solr/core/src/java/org/apache/solr/cli/ConfigSetUploadTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/zk/ConfigSetUploadTool.java
index 71daf15d3386..891b71b13c3e 100644
--- a/solr/core/src/java/org/apache/solr/cli/ConfigSetUploadTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/zk/ConfigSetUploadTool.java
@@ -14,13 +14,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.zk;
import java.lang.invoke.MethodHandles;
import java.nio.file.Path;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkMaintenanceUtils;
import org.apache.solr.common.util.EnvUtils;
diff --git a/solr/core/src/java/org/apache/solr/cli/UpdateACLTool.java b/solr/core/src/java/org/apache/solr/cli/tools/zk/UpdateACLTool.java
similarity index 92%
rename from solr/core/src/java/org/apache/solr/cli/UpdateACLTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/zk/UpdateACLTool.java
index 021f05d7e82c..7e8c5aa4ed17 100644
--- a/solr/core/src/java/org/apache/solr/cli/UpdateACLTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/zk/UpdateACLTool.java
@@ -15,11 +15,15 @@
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.zk;
import java.util.concurrent.TimeUnit;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
import org.apache.solr.cloud.ZkController;
import org.apache.solr.common.cloud.SolrZkClient;
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkCpTool.java b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkCpTool.java
similarity index 97%
rename from solr/core/src/java/org/apache/solr/cli/ZkCpTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/zk/ZkCpTool.java
index 2edaccee9df1..ad135b827b68 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkCpTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkCpTool.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.zk;
import static org.apache.solr.packagemanager.PackageUtils.format;
@@ -27,6 +27,10 @@
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.cloud.SolrZkClient;
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkLsTool.java b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkLsTool.java
similarity index 92%
rename from solr/core/src/java/org/apache/solr/cli/ZkLsTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/zk/ZkLsTool.java
index 2ca4be286f20..586e9bab5909 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkLsTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkLsTool.java
@@ -14,11 +14,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.zk;
import java.lang.invoke.MethodHandles;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.common.cloud.SolrZkClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkMkrootTool.java b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkMkrootTool.java
similarity index 93%
rename from solr/core/src/java/org/apache/solr/cli/ZkMkrootTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/zk/ZkMkrootTool.java
index 2a644f2a1364..6c64414fcad7 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkMkrootTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkMkrootTool.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.zk;
import static org.apache.solr.packagemanager.PackageUtils.format;
@@ -22,6 +22,10 @@
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.common.cloud.SolrZkClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkMvTool.java b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkMvTool.java
similarity index 94%
rename from solr/core/src/java/org/apache/solr/cli/ZkMvTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/zk/ZkMvTool.java
index a11ac0884f87..e3cb8cc0ad26 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkMvTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkMvTool.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.zk;
import static org.apache.solr.packagemanager.PackageUtils.format;
@@ -22,6 +22,10 @@
import java.util.Locale;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.common.cloud.SolrZkClient;
import org.slf4j.Logger;
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkRmTool.java b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkRmTool.java
similarity index 93%
rename from solr/core/src/java/org/apache/solr/cli/ZkRmTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/zk/ZkRmTool.java
index 92e6b4daaa4e..fae3a9df44f4 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkRmTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkRmTool.java
@@ -14,12 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.zk;
import java.lang.invoke.MethodHandles;
import java.util.Locale;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.common.cloud.SolrZkClient;
import org.slf4j.Logger;
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkToolHelp.java b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkToolHelp.java
similarity index 95%
rename from solr/core/src/java/org/apache/solr/cli/ZkToolHelp.java
rename to solr/core/src/java/org/apache/solr/cli/tools/zk/ZkToolHelp.java
index 9251484a859f..e383535317ce 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkToolHelp.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkToolHelp.java
@@ -14,13 +14,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.zk;
import static org.apache.solr.cli.SolrCLI.print;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
/** Supports zk help information in the bin/solr script. */
public class ZkToolHelp extends ToolBase {
diff --git a/solr/core/src/java/org/apache/solr/cli/tools/zk/package-info.java b/solr/core/src/java/org/apache/solr/cli/tools/zk/package-info.java
new file mode 100644
index 000000000000..3ff4b2606230
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/cli/tools/zk/package-info.java
@@ -0,0 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/** CLI tools for ZooKeeper and config set operations. */
+package org.apache.solr.cli.tools.zk;
diff --git a/solr/core/src/test/org/apache/solr/cli/TestSolrCLIRunExample.java b/solr/core/src/test/org/apache/solr/cli/TestSolrCLIRunExample.java
index 7a7f105c0848..2218f57ebbfa 100644
--- a/solr/core/src/test/org/apache/solr/cli/TestSolrCLIRunExample.java
+++ b/solr/core/src/test/org/apache/solr/cli/TestSolrCLIRunExample.java
@@ -37,6 +37,8 @@
import org.apache.commons.exec.ExecuteResultHandler;
import org.apache.lucene.tests.util.LuceneTestCase;
import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.cli.tools.DeleteTool;
+import org.apache.solr.cli.tools.RunExampleTool;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.apache.solr.client.solrj.request.SolrQuery;
diff --git a/solr/core/src/test/org/apache/solr/cli/SolrProcessManagerTest.java b/solr/core/src/test/org/apache/solr/cli/process/SolrProcessManagerTest.java
similarity index 97%
rename from solr/core/src/test/org/apache/solr/cli/SolrProcessManagerTest.java
rename to solr/core/src/test/org/apache/solr/cli/process/SolrProcessManagerTest.java
index 2102e1e3d75d..f572ce96b12c 100644
--- a/solr/core/src/test/org/apache/solr/cli/SolrProcessManagerTest.java
+++ b/solr/core/src/test/org/apache/solr/cli/process/SolrProcessManagerTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.process;
import com.fasterxml.jackson.core.JsonProcessingException;
import java.io.BufferedReader;
@@ -32,7 +32,7 @@
import java.util.stream.Collectors;
import org.apache.commons.math3.util.Pair;
import org.apache.solr.SolrTestCase;
-import org.apache.solr.cli.SolrProcessManager.SolrProcess;
+import org.apache.solr.cli.process.SolrProcessManager.SolrProcess;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.slf4j.Logger;
@@ -97,7 +97,7 @@ private static Pair