You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by ds...@apache.org on 2021/11/03 04:27:18 UTC

[solr] branch main updated: gradle: Dependency tune-up of solr-core & solrj (#349)

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

dsmiley 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 4fdde44  gradle: Dependency tune-up of solr-core & solrj (#349)
4fdde44 is described below

commit 4fdde44b8b86c5033dea13d4f1f01cc0e9857ee6
Author: David Smiley <ds...@apache.org>
AuthorDate: Wed Nov 3 00:27:12 2021 -0400

    gradle: Dependency tune-up of solr-core & solrj (#349)
    
    build.gradle of solr-core & solrj:
    * Reduce "api" scope of solr-core, thus other modules need to explicitly depend on what they need
    * Organized dependencies
    * Used transitive dependencies much more
    
    solr-core dependencies:
    * upgraded Janino (includes commons-compiler) because Calcite says we should use this version
    * removed eigenbase-properties which seems unused by Calcite stuff
    * removed kerby-kdc (tests) which seems unused by Hadoo Auth stuff
    
    other modules:
    * code changes: removed some usages of dependencies in favor of JDK equivalents in order to reduce our need for some dependencies (even though as a whole project we still have them)
    * build.gradle: depend explicitly on some dependencies we formerly inherited from SolrJ/Solr-Core
---
 help/dependencies.txt                              |   4 +-
 solr/benchmark/build.gradle                        |   1 +
 solr/contrib/analysis-extras/build.gradle          |   1 +
 solr/contrib/analytics/build.gradle                |   2 +
 .../legacy/LegacyAbstractAnalyticsTest.java        |   3 +-
 solr/contrib/clustering/build.gradle               |   2 +
 .../solr/handler/clustering/EngineParameters.java  |   3 +-
 solr/contrib/extraction/build.gradle               |   1 +
 solr/contrib/gcs-repository/build.gradle           |   1 +
 solr/contrib/langid/build.gradle                   |   2 +-
 solr/contrib/ltr/build.gradle                      |   1 +
 solr/contrib/prometheus-exporter/build.gradle      |   8 +-
 .../prometheus/PrometheusExporterTestBase.java     |  26 +--
 .../prometheus/collector/MetricSamplesTest.java    |  35 ++--
 solr/contrib/s3-repository/build.gradle            |   5 +
 solr/contrib/scripting/build.gradle                |   2 +
 solr/core/build.gradle                             | 193 +++++++++++---------
 .../ConcurrentDeleteAndCreateCollectionTest.java   |  21 +--
 solr/licenses/commons-compiler-3.0.11.jar.sha1     |   1 +
 solr/licenses/commons-compiler-3.0.9.jar.sha1      |   1 -
 solr/licenses/eigenbase-properties-1.1.5.jar.sha1  |   1 -
 solr/licenses/eigenbase-properties-LICENSE-ASL.txt | 202 ---------------------
 solr/licenses/eigenbase-properties-NOTICE.txt      |  20 --
 solr/licenses/janino-3.0.11.jar.sha1               |   1 +
 solr/licenses/janino-3.0.9.jar.sha1                |   1 -
 solr/licenses/kerby-kdc-1.0.1.jar.sha1             |   1 -
 solr/licenses/kerby-kdc-LICENSE-ASL.txt            | 201 --------------------
 solr/licenses/kerby-kdc-NOTICE.txt                 |   5 -
 solr/solrj/build.gradle                            |  35 ++--
 .../io/stream/eval/ConversionEvaluatorsTest.java   |   3 +-
 .../io/stream/eval/TemporalEvaluatorsTest.java     |   4 +-
 .../solrj/io/stream/ops/ConcatOperationTest.java   |   4 +-
 .../client/solrj/io/stream/ops/OperationsTest.java |   4 +-
 .../solr/common/util/TestJsonRecordReader.java     |   3 +-
 solr/test-framework/build.gradle                   |  14 +-
 .../apache/solr/cloud/MiniSolrCloudCluster.java    |   2 +-
 versions.lock                                      |  96 +++++-----
 versions.props                                     |   1 -
 38 files changed, 248 insertions(+), 663 deletions(-)

diff --git a/help/dependencies.txt b/help/dependencies.txt
index d67130f..2990db6 100644
--- a/help/dependencies.txt
+++ b/help/dependencies.txt
@@ -182,7 +182,7 @@ Note the brackets - they are important and prevent accidental
 mistakes of applying the exclusion to the wrong scope.
 
 
-Updating dependency checksum and licenses
+Updating dependency checksums and licenses
 -----------------------------------------
 
 The last step is to make sure the licenses, notice files and checksums
@@ -191,6 +191,6 @@ missing and where:
 
 gradlew licenses
 
-To update JAR checksums for licenses use:
+To update JAR checksums (sha1) for licenses use:
 
 gradlew updateLicenses
diff --git a/solr/benchmark/build.gradle b/solr/benchmark/build.gradle
index dfbd334..a6e9b62 100644
--- a/solr/benchmark/build.gradle
+++ b/solr/benchmark/build.gradle
@@ -46,6 +46,7 @@ task echoCp {
 dependencies {
   implementation project(':solr:test-framework')
 
+  implementation 'commons-io:commons-io'
   implementation "org.quicktheories:quicktheories"
   implementation 'org.jctools:jctools-core'
   implementation 'org.openjdk.jmh:jmh-core'
diff --git a/solr/contrib/analysis-extras/build.gradle b/solr/contrib/analysis-extras/build.gradle
index 4bff3a5..3a2b049 100644
--- a/solr/contrib/analysis-extras/build.gradle
+++ b/solr/contrib/analysis-extras/build.gradle
@@ -23,6 +23,7 @@ description = 'Additional analysis components'
 dependencies {
   api project(':solr:core')
 
+  implementation 'commons-io:commons-io'
   implementation "org.apache.lucene:lucene-analysis-icu"
   implementation "org.apache.lucene:lucene-analysis-smartcn"
   implementation "org.apache.lucene:lucene-analysis-morfologik"
diff --git a/solr/contrib/analytics/build.gradle b/solr/contrib/analytics/build.gradle
index 91e165a..645a79e 100644
--- a/solr/contrib/analytics/build.gradle
+++ b/solr/contrib/analytics/build.gradle
@@ -21,5 +21,7 @@ description = 'Analytics Package'
 
 dependencies {
   implementation project(':solr:core')
+  implementation 'com.fasterxml.jackson.core:jackson-databind'
+  implementation ('com.google.guava:guava') { transitive = false }
   testImplementation project(':solr:test-framework')
 }
diff --git a/solr/contrib/analytics/src/test/org/apache/solr/analytics/legacy/LegacyAbstractAnalyticsTest.java b/solr/contrib/analytics/src/test/org/apache/solr/analytics/legacy/LegacyAbstractAnalyticsTest.java
index 2f78203..b38e2dc 100644
--- a/solr/contrib/analytics/src/test/org/apache/solr/analytics/legacy/LegacyAbstractAnalyticsTest.java
+++ b/solr/contrib/analytics/src/test/org/apache/solr/analytics/legacy/LegacyAbstractAnalyticsTest.java
@@ -34,7 +34,6 @@ import javax.xml.xpath.XPathConstants;
 import javax.xml.xpath.XPathExpressionException;
 import javax.xml.xpath.XPathFactory;
 
-import org.apache.commons.lang3.StringUtils;
 import org.apache.lucene.util.IOUtils;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.analytics.util.AnalyticsResponseHeadings;
@@ -222,7 +221,7 @@ public class LegacyAbstractAnalyticsTest extends SolrTestCaseJ4 {
       while (file.hasNextLine()) {
         String line = file.nextLine();
         line = line.trim();
-        if( StringUtils.isBlank(line) || line.startsWith("#")){
+        if( line.isEmpty() || line.startsWith("#")){
           continue;
         }
         String[] param = line.split("=");
diff --git a/solr/contrib/clustering/build.gradle b/solr/contrib/clustering/build.gradle
index 03d53fc..fc60c45 100644
--- a/solr/contrib/clustering/build.gradle
+++ b/solr/contrib/clustering/build.gradle
@@ -25,6 +25,8 @@ dependencies {
 
   implementation "org.apache.lucene:lucene-analysis-common"
 
+  implementation 'commons-io:commons-io'
+
   implementation 'org.carrot2:carrot2-core'
 
   testImplementation project(':solr:test-framework')
diff --git a/solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/EngineParameters.java b/solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/EngineParameters.java
index 60137d6..5169343 100644
--- a/solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/EngineParameters.java
+++ b/solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/EngineParameters.java
@@ -16,7 +16,6 @@
  */
 package org.apache.solr.handler.clustering;
 
-import org.apache.commons.lang3.StringUtils;
 import org.apache.solr.common.params.SolrParams;
 
 import java.util.Arrays;
@@ -345,7 +344,7 @@ public final class EngineParameters implements Cloneable {
     Set<String> fields = new LinkedHashSet<>(fields());
     fields.add(docIdField());
     String languageField = languageField();
-    if (StringUtils.isNotBlank(languageField)) {
+    if (languageField != null && !languageField.isBlank()) {
       fields.add(languageField);
     }
     return fields;
diff --git a/solr/contrib/extraction/build.gradle b/solr/contrib/extraction/build.gradle
index 20f07bf..edff47f 100644
--- a/solr/contrib/extraction/build.gradle
+++ b/solr/contrib/extraction/build.gradle
@@ -32,6 +32,7 @@ dependencies {
   runtimeOnly ('org.apache.tika:tika-java7') { transitive = false }
   runtimeOnly ('org.apache.tika:tika-xmp') { transitive = false }
 
+  implementation 'commons-io:commons-io'
   implementation ('com.healthmarketscience.jackcess:jackcess') { transitive = false }
   implementation ('com.healthmarketscience.jackcess:jackcess-encrypt') { transitive = false }
   implementation ('org.gagravarr:vorbis-java-tika') { transitive = false }
diff --git a/solr/contrib/gcs-repository/build.gradle b/solr/contrib/gcs-repository/build.gradle
index bd6d856..a4c5b23 100644
--- a/solr/contrib/gcs-repository/build.gradle
+++ b/solr/contrib/gcs-repository/build.gradle
@@ -23,6 +23,7 @@ description = 'GCS Backup Repository'
 dependencies {
     api project(':solr:core')
 
+    implementation ('com.google.guava:guava') { transitive = false }
     implementation ('com.google.api:api-common') { exclude group: 'com.google.guava', module: 'guava' }
     implementation ('com.google.api:gax') { exclude group: 'com.google.guava', module: 'guava' }
     implementation ('com.google.api:gax-httpjson') { transitive = false }
diff --git a/solr/contrib/langid/build.gradle b/solr/contrib/langid/build.gradle
index f9cfdb7..d1214fc 100644
--- a/solr/contrib/langid/build.gradle
+++ b/solr/contrib/langid/build.gradle
@@ -24,7 +24,7 @@ dependencies {
   implementation project(':solr:core')
 
   implementation ('org.apache.tika:tika-core') { transitive = false }
-
+  implementation 'commons-io:commons-io'
   implementation 'com.cybozu.labs:langdetect'
   implementation 'net.arnx:jsonic'
   implementation 'org.apache.opennlp:opennlp-tools'
diff --git a/solr/contrib/ltr/build.gradle b/solr/contrib/ltr/build.gradle
index 5b195be..a53dd0c 100644
--- a/solr/contrib/ltr/build.gradle
+++ b/solr/contrib/ltr/build.gradle
@@ -22,6 +22,7 @@ description = 'Learning to Rank Package'
 dependencies {
   implementation project(':solr:core')
 
+  implementation 'commons-io:commons-io'
   implementation "org.apache.lucene:lucene-analysis-common"
 
   testImplementation('org.mockito:mockito-core', {
diff --git a/solr/contrib/prometheus-exporter/build.gradle b/solr/contrib/prometheus-exporter/build.gradle
index 0f5a1be..bcaffed 100644
--- a/solr/contrib/prometheus-exporter/build.gradle
+++ b/solr/contrib/prometheus-exporter/build.gradle
@@ -22,6 +22,8 @@ description = 'Prometheus exporter for exposing metrics from Solr using Metrics
 
 dependencies {
   implementation project(':solr:solrj')
+  implementation 'org.slf4j:slf4j-api'
+  implementation('org.apache.zookeeper:zookeeper') { transitive = false } // ideally remove ZK dep
 
   implementation ('io.prometheus:simpleclient')
   implementation ('io.prometheus:simpleclient_common')
@@ -32,10 +34,8 @@ dependencies {
   })
   implementation ('com.fasterxml.jackson.core:jackson-databind')
   implementation ('net.sourceforge.argparse4j:argparse4j')
-  implementation ('com.github.ben-manes.caffeine:caffeine', {
-    exclude group: "org.checkerframework", module: "checker-qual"
-    exclude group: "com.google.errorprone", module: "error_prone_annotations"
-  })
+  implementation ('com.github.ben-manes.caffeine:caffeine') { transitive = false }
+  implementation 'commons-io:commons-io'
 
   runtimeOnly 'org.apache.logging.log4j:log4j-api'
   runtimeOnly 'org.apache.logging.log4j:log4j-core'
diff --git a/solr/contrib/prometheus-exporter/src/test/org/apache/solr/prometheus/PrometheusExporterTestBase.java b/solr/contrib/prometheus-exporter/src/test/org/apache/solr/prometheus/PrometheusExporterTestBase.java
index d2e109d..9333125 100644
--- a/solr/contrib/prometheus-exporter/src/test/org/apache/solr/prometheus/PrometheusExporterTestBase.java
+++ b/solr/contrib/prometheus-exporter/src/test/org/apache/solr/prometheus/PrometheusExporterTestBase.java
@@ -17,7 +17,8 @@
 
 package org.apache.solr.prometheus;
 
-import com.google.common.collect.ImmutableMap;
+import java.util.Map;
+
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
 import org.apache.solr.cloud.AbstractDistribZkTestBase;
 import org.apache.solr.cloud.SolrCloudTestCase;
@@ -34,18 +35,17 @@ public class PrometheusExporterTestBase extends SolrCloudTestCase {
   public static final int NUM_NODES = NUM_SHARDS * NUM_REPLICAS;
   public static final int TIMEOUT = 60;
 
-  public static final ImmutableMap<String, Double> FACET_VALUES = ImmutableMap.<String, Double>builder()
-      .put("electronics", 14.0)
-      .put("currency", 4.0)
-      .put("memory", 3.0)
-      .put("and", 2.0)
-      .put("card", 2.0)
-      .put("connector", 2.0)
-      .put("drive", 2.0)
-      .put("graphics", 2.0)
-      .put("hard", 2.0)
-      .put("search", 2.0)
-      .build();
+  public static final Map<String, Double> FACET_VALUES = Map.of(
+      "electronics", 14.0,
+      "currency", 4.0,
+      "memory", 3.0,
+      "and", 2.0,
+      "card", 2.0,
+      "connector", 2.0,
+      "drive", 2.0,
+      "graphics", 2.0,
+      "hard", 2.0,
+      "search", 2.0);
 
   @Override
   public void setUp() throws Exception {
diff --git a/solr/contrib/prometheus-exporter/src/test/org/apache/solr/prometheus/collector/MetricSamplesTest.java b/solr/contrib/prometheus-exporter/src/test/org/apache/solr/prometheus/collector/MetricSamplesTest.java
index 2956ed4..e33e75d 100644
--- a/solr/contrib/prometheus-exporter/src/test/org/apache/solr/prometheus/collector/MetricSamplesTest.java
+++ b/solr/contrib/prometheus-exporter/src/test/org/apache/solr/prometheus/collector/MetricSamplesTest.java
@@ -20,18 +20,16 @@ package org.apache.solr.prometheus.collector;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
 import java.util.stream.Collectors;
 
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Maps;
 import io.prometheus.client.Collector;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
 
 public class MetricSamplesTest {
 
@@ -58,15 +56,15 @@ public class MetricSamplesTest {
         .findFirst()
         .orElseThrow(() -> new RuntimeException(String.format(Locale.ROOT, "Unable to find item %s", metricName)));
 
-    assertTrue(Iterables.elementsEqual(expectedValues, test1.samples.stream().map(s -> s.value).collect(Collectors.toList())));
+    assertEquals(expectedValues, test1.samples.stream().map(s -> s.value).collect(Collectors.toList()));
   }
 
   @Test
   public void asList() {
-    MetricSamples samples = new MetricSamples(Maps.newHashMap(ImmutableMap.<String, Collector.MetricFamilySamples>builder()
-        .put("test1", samples("test1", Collector.Type.GAUGE, sample("test1", 1.0), sample("test1", 2.0)))
-        .put("test2", samples("test2", Collector.Type.GAUGE, sample("test2", 1.0)))
-        .build()));
+    MetricSamples samples = new MetricSamples(Map.of(
+        "test1", samples("test1", Collector.Type.GAUGE, sample("test1", 1.0), sample("test1", 2.0)),
+        "test2", samples("test2", Collector.Type.GAUGE, sample("test2", 1.0))
+    ));
 
     List<Collector.MetricFamilySamples> output = samples.asList();
 
@@ -78,16 +76,15 @@ public class MetricSamplesTest {
 
   @Test
   public void addAll() {
-    MetricSamples lhs = new MetricSamples(Maps.newHashMap(ImmutableMap.<String, Collector.MetricFamilySamples>builder()
-        .put("same", samples("same", Collector.Type.GAUGE, sample("same", 1.0), sample("same", 2.0)))
-        .put("diff1", samples("diff1", Collector.Type.GAUGE, sample("diff1", 1.0)))
-        .build()));
-
-    MetricSamples rhs = new MetricSamples(Maps.newHashMap(ImmutableMap.<String, Collector.MetricFamilySamples>builder()
-        .put("same", samples("test1", Collector.Type.GAUGE, sample("test1", 3.0), sample("test1", 4.0)))
-        .put("diff2", samples("diff2", Collector.Type.GAUGE, sample("diff2", 1.0)))
-        .build()));
-
+    MetricSamples lhs = new MetricSamples(new HashMap<>(Map.of(
+        "same", samples("same", Collector.Type.GAUGE, sample("same", 1.0), sample("same", 2.0)),
+        "diff1", samples("diff1", Collector.Type.GAUGE, sample("diff1", 1.0))
+    )));
+
+    MetricSamples rhs = new MetricSamples(Map.of(
+        "same", samples("test1", Collector.Type.GAUGE, sample("test1", 3.0), sample("test1", 4.0)),
+        "diff2", samples("diff2", Collector.Type.GAUGE, sample("diff2", 1.0))
+    ));
     lhs.addAll(rhs);
 
     List<Collector.MetricFamilySamples> output = lhs.asList();
diff --git a/solr/contrib/s3-repository/build.gradle b/solr/contrib/s3-repository/build.gradle
index 8e1ee3a..4f8df7e 100644
--- a/solr/contrib/s3-repository/build.gradle
+++ b/solr/contrib/s3-repository/build.gradle
@@ -32,6 +32,10 @@ dependencies {
     }
     implementation (group: 'software.amazon.awssdk', name: 'sdk-core')
     implementation (group: 'software.amazon.awssdk', name: 'protocol-core')
+
+    implementation ('com.google.guava:guava') { transitive = false }
+    implementation 'commons-io:commons-io'
+
     runtimeOnly (group: 'com.fasterxml.woodstox', name: 'woodstox-core')
     runtimeOnly (group: 'org.codehaus.woodstox', name: 'stax2-api')
 
@@ -49,6 +53,7 @@ dependencies {
     }
 
     testImplementation project(':solr:test-framework')
+    testImplementation 'org.apache.commons:commons-lang3'
 }
 
 test {
diff --git a/solr/contrib/scripting/build.gradle b/solr/contrib/scripting/build.gradle
index 32f4e1e..6f68a9a 100644
--- a/solr/contrib/scripting/build.gradle
+++ b/solr/contrib/scripting/build.gradle
@@ -21,5 +21,7 @@ description = 'Scripting Package'
 
 dependencies {
   implementation project(':solr:core')
+  implementation 'commons-io:commons-io'
+  implementation ('com.google.guava:guava') { transitive = false }
   testImplementation project(':solr:test-framework')
 }
diff --git a/solr/core/build.gradle b/solr/core/build.gradle
index c71106d..a40b83d 100644
--- a/solr/core/build.gradle
+++ b/solr/core/build.gradle
@@ -20,144 +20,165 @@ apply plugin: 'java-library'
 
 description = 'Apache Solr Core'
 
+configurations.all {
+  exclude group: 'log4j', module: 'log4j'
+  exclude group: 'commons-logging', module: 'commons-logging'
+  exclude group: 'org.slf4j', module: 'slf4j-log4j12'
+  exclude group: 'org.apache.yetus', module: 'audience-annotations'
+  exclude group: 'org.codehaus.mojo', module: 'animal-sniffer-annotations'
+  // be conservative on what's added here.  Affects *all* configs, including internal ones.
+}
+
 dependencies {
+  // Export these dependencies so that they're imported transitively by
+  // other modules.
+
+  // These Lucene modules are the most significant to Solr
   api "org.apache.lucene:lucene-core"
   api "org.apache.lucene:lucene-analysis-common"
-  api "org.apache.lucene:lucene-analysis-kuromoji"
-  api "org.apache.lucene:lucene-analysis-nori"
-  api "org.apache.lucene:lucene-analysis-phonetic"
-  api "org.apache.lucene:lucene-backward-codecs"
-  api "org.apache.lucene:lucene-classification"
-  api "org.apache.lucene:lucene-codecs"
-  api "org.apache.lucene:lucene-expressions"
-  api "org.apache.lucene:lucene-grouping"
-  api "org.apache.lucene:lucene-highlighter"
-  api "org.apache.lucene:lucene-join"
-  api "org.apache.lucene:lucene-misc"
   api "org.apache.lucene:lucene-queries"
-  api "org.apache.lucene:lucene-queryparser"
-  api "org.apache.lucene:lucene-sandbox"
-  api "org.apache.lucene:lucene-spatial-extras"
-  api "org.apache.lucene:lucene-suggest"
-
-  // Export these dependencies so that they're imported transitively by
-  // other modules.
-  api ('com.google.guava:guava', {
-    exclude group: "org.codehaus.mojo", module: "animal-sniffer-annotations"
-    exclude group: "com.google.j2objc", module: "j2objc-annotations"
-    exclude group: "com.google.errorprone", module: "error_prone_annotations"
-    exclude group: "org.checkerframework", module: "checker-qual"
-    exclude group: "com.google.code.findbugs", module: "jsr305"
-  })
 
   api project(':solr:solrj')
   api project(':solr:server')
 
-  api 'org.apache.commons:commons-lang3'
-  api 'com.carrotsearch:hppc'
-  api 'com.fasterxml.jackson.core:jackson-databind'
-  api 'commons-cli:commons-cli'
-  api 'commons-codec:commons-codec'
-  api 'commons-collections:commons-collections'
-  api 'org.apache.commons:commons-collections4'
-
+  // Non-API below; although there are exceptions
+
+  implementation "org.apache.lucene:lucene-analysis-kuromoji"
+  implementation "org.apache.lucene:lucene-analysis-nori"
+  implementation "org.apache.lucene:lucene-analysis-phonetic"
+  implementation "org.apache.lucene:lucene-backward-codecs"
+  implementation "org.apache.lucene:lucene-codecs"
+  implementation "org.apache.lucene:lucene-classification"
+  implementation "org.apache.lucene:lucene-expressions"
+  implementation "org.apache.lucene:lucene-grouping"
+  implementation "org.apache.lucene:lucene-highlighter"
+  implementation "org.apache.lucene:lucene-join"
+  implementation "org.apache.lucene:lucene-misc"
+  implementation "org.apache.lucene:lucene-queryparser"
+  implementation "org.apache.lucene:lucene-sandbox"
+  implementation "org.apache.lucene:lucene-spatial-extras"
+  implementation "org.apache.lucene:lucene-suggest"
+
+  // Collections & lang utilities
+  implementation ('com.google.guava:guava') { transitive = false }
+  implementation 'org.apache.commons:commons-lang3'
+  implementation 'org.apache.commons:commons-math3'
+  implementation 'commons-io:commons-io'
+  implementation 'com.carrotsearch:hppc'
+  implementation 'org.apache.commons:commons-collections4'
+  runtimeOnly 'commons-collections:commons-collections' // for Hadoop and...?
+
+  implementation('com.github.ben-manes.caffeine:caffeine') { transitive = false }
+
+  implementation 'org.slf4j:slf4j-api'
+
+  implementation 'commons-codec:commons-codec'
+
+  implementation 'commons-cli:commons-cli'
+
+  implementation 'com.fasterxml.jackson.core:jackson-databind'
   implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-smile'
 
-  implementation('com.github.ben-manes.caffeine:caffeine', {
-    exclude group: "org.checkerframework", module: "checker-qual"
-    exclude group: "com.google.errorprone", module: "error_prone_annotations"
-  })
+  implementation 'org.eclipse.jetty:jetty-client'
 
+  // ZooKeeper & Curator
+  implementation 'org.apache.zookeeper:zookeeper'
+  // required for instantiating a Zookeeper server (for embedding ZK or running tests)
+  runtimeOnly ('org.xerial.snappy:snappy-java')
+  implementation ('org.apache.curator:curator-client')
+  implementation ('org.apache.curator:curator-framework')
+  runtimeOnly ('org.apache.curator:curator-recipes')
+
+  // For Package Manager
   implementation 'com.github.zafarkhaja:java-semver'
-  implementation 'com.google.re2j:re2j'
 
   implementation('com.jayway.jsonpath:json-path', {
     exclude group: "net.minidev", module: "json-smart"
   })
 
+  // StatsComponents percentiles
   implementation 'com.tdunning:t-digest'
 
+  // Distributed Tracing
   api 'io.opentracing:opentracing-api' // Tracer is exposed on some methods
   implementation 'io.opentracing:opentracing-noop'
   implementation 'io.opentracing:opentracing-util'
+  testImplementation 'io.opentracing:opentracing-mock'
+
   implementation 'org.apache.commons:commons-exec'
+
   implementation 'org.apache.commons:commons-text'
-  implementation("org.apache.commons:commons-configuration2", {
-    exclude group: "commons-logging", module: "commons-logging"
-  })
-  implementation('org.apache.htrace:htrace-core4', {
-    exclude group: "com.fasterxml.jackson.core", module: "jackson-databind"
-  })
 
   implementation 'org.apache.logging.log4j:log4j-api'
   implementation 'org.apache.logging.log4j:log4j-core'
   implementation 'org.apache.logging.log4j:log4j-slf4j-impl'
 
+  testImplementation 'org.slf4j:jcl-over-slf4j'
+
+  // JWT Auth plugin
   api 'org.bitbucket.b_c:jose4j'
-  implementation 'org.codehaus.janino:commons-compiler'
-  implementation 'org.codehaus.janino:janino'
 
   // For faster XML processing than the JDK
   implementation (group: 'com.fasterxml.woodstox', name: 'woodstox-core')
 
-  implementation ('org.apache.calcite.avatica:avatica-core') { transitive = false }
-  implementation ('org.apache.calcite:calcite-core') { transitive = false }
-  implementation ('org.checkerframework:checker-qual') { transitive = false }
-  implementation ('com.esri.geometry:esri-geometry-api') { transitive = false }
-  implementation ('org.apiguardian:apiguardian-api')  { transitive = false }
+  // SQL Parser via Calcite
+  implementation ('org.apache.calcite:calcite-core', {
+    exclude group: 'org.apache.calcite.avatica', module: 'avatica-metrics'
+    exclude group: 'com.google.guava', module: 'guava' // TODO remove this to keep versions in sync
+    exclude group: 'com.fasterxml.jackson.dataformat', module: 'jackson-dataformat-yaml'
+    exclude group: 'com.google.uzaygezen', module: 'uzaygezen-core'
+    exclude group: 'com.yahoo.datasketches', module: 'sketches-core'
+    exclude group: 'org.apache.commons', module: 'commons-dbcp2'
+    exclude group: 'net.minidev', module: 'json-smart'
+    exclude group: 'net.hydromatic', module: 'aggdesigner-algorithm'
+  })
+  // sub-deps of calcite-core that we reference directly
   implementation ('org.apache.calcite:calcite-linq4j') { transitive = false }
-  implementation ('org.apache.curator:curator-client') { transitive = false }
-  implementation ('org.apache.curator:curator-framework') { transitive = false }
-  implementation ('org.apache.hadoop:hadoop-annotations') { transitive = false }
-  implementation ('org.apache.hadoop:hadoop-auth') { transitive = false }
-  implementation ('org.apache.hadoop:hadoop-common') { transitive = false }
-  implementation ('org.apache.hadoop:hadoop-hdfs-client') { transitive = false }
-  testImplementation 'org.apache.commons:commons-compress' // required for customized hadoop classes
+  implementation ('org.apache.calcite.avatica:avatica-core') { transitive = false }
 
-  implementation ('net.hydromatic:eigenbase-properties') { transitive = false }
+  // Hadoop; general stuff
+  implementation ('org.apache.hadoop:hadoop-common') { transitive = false } // too many to ignore
+  implementation ('org.apache.hadoop:hadoop-annotations')
+  runtimeOnly 'org.apache.htrace:htrace-core4' // note: removed in Hadoop 3.3.2
+  runtimeOnly "org.apache.commons:commons-configuration2"
+  testImplementation ('org.apache.hadoop:hadoop-common::tests') { transitive = false }
+  // Hadoop Test hacks for Java Security Manager -- SOLR-14033
+  testImplementation 'org.apache.commons:commons-compress'
+  testImplementation ('com.sun.jersey:jersey-servlet') { transitive = false }
 
-  runtimeOnly ('org.apache.curator:curator-recipes') { transitive = false }
+  // HDFS
+  implementation ('org.apache.hadoop:hadoop-hdfs-client') { transitive = false }
+  testImplementation ('org.apache.hadoop:hadoop-hdfs') { transitive = false }
+  testImplementation ('org.apache.hadoop:hadoop-hdfs::tests') { transitive = false }
+  testImplementation 'org.apache.logging.log4j:log4j-1.2-api'
+
+  // Hadoop auth framework
+  implementation ('org.apache.hadoop:hadoop-auth') { transitive = false }
+  runtimeOnly 'com.google.re2j:re2j' // transitive of hadoop-common; used by Kerberos auth
   runtimeOnly ('org.apache.kerby:kerb-core')
   runtimeOnly ('org.apache.kerby:kerb-util')
-  runtimeOnly ('org.apache.kerby:kerby-asn1')
-  runtimeOnly ('org.apache.kerby:kerby-pkix')
-  runtimeOnly ('com.google.protobuf:protobuf-java')
+
+  // Hadoop MiniKdc Dependencies (for Kerberos auth tests)
+  testImplementation ('org.apache.hadoop:hadoop-minikdc', {
+    exclude group:'org.apache.kerby', module:'kerby-xdr'
+    exclude group:'org.apache.kerby', module:'token-provider'
+  })
 
   testImplementation "org.apache.lucene:lucene-analysis-icu"
 
   testImplementation project(':solr:contrib:analysis-extras')
-  testImplementation project(':solr:test-framework')
 
-  testImplementation ('org.apache.hadoop:hadoop-common::tests') { transitive = false }
-  testImplementation ('org.apache.hadoop:hadoop-hdfs') { transitive = false }
-  testImplementation ('org.apache.hadoop:hadoop-hdfs::tests') { transitive = false }
-  testImplementation ('org.apache.hadoop:hadoop-minikdc') { transitive = false }
-  testImplementation 'org.apache.logging.log4j:log4j-1.2-api'
-
-  testImplementation ('org.apache.kerby:kerb-client') { transitive = false }
-  testImplementation ('org.apache.kerby:kerb-common') { transitive = false }
-  testImplementation ('org.apache.kerby:kerb-identity') { transitive = false }
-  testImplementation ('org.apache.kerby:kerb-server') { transitive = false }
-  testImplementation ('org.apache.kerby:kerb-simplekdc') { transitive = false }
-  testImplementation ('org.apache.kerby:kerb-admin') { transitive = false }
-  testImplementation ('org.apache.kerby:kerby-kdc') { transitive = false }
-
-  testImplementation ('com.sun.jersey:jersey-servlet') { transitive = false }
+  testImplementation project(':solr:test-framework')
 
-  // required for instantiating a Zookeeper server in tests or embedded
-  runtimeOnly ('org.xerial.snappy:snappy-java')
-  
-  testImplementation 'com.google.protobuf:protobuf-java'
-  testImplementation 'commons-logging:commons-logging'
   testImplementation('org.mockito:mockito-core', {
     exclude group: "net.bytebuddy", module: "byte-buddy-agent"
   })
+
   testImplementation('no.nav.security:mock-oauth2-server', {
     exclude group: "ch.qos.logback", module: "logback-core"
     exclude group: "io.netty", module: "netty-all"
-    exclude group: "junit", module: "junit"
     exclude group: "ch.qos.logback", module: "logback-classic"
-    exclude group: "org.slf4j", module: "slf4j-api"
   })
 }
 
+
diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/ConcurrentDeleteAndCreateCollectionTest.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/ConcurrentDeleteAndCreateCollectionTest.java
index e936be3..9585d59 100644
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/ConcurrentDeleteAndCreateCollectionTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/ConcurrentDeleteAndCreateCollectionTest.java
@@ -18,7 +18,6 @@ package org.apache.solr.cloud.api.collections;
 
 import java.io.IOException;
 import java.lang.invoke.MethodHandles;
-import java.nio.file.Path;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 
@@ -32,7 +31,6 @@ import org.apache.solr.cloud.MiniSolrCloudCluster;
 import org.apache.solr.common.util.IOUtils;
 import org.apache.solr.common.util.TimeSource;
 import org.apache.solr.util.TimeOut;
-import org.apache.zookeeper.KeeperException;
 import org.junit.After;
 import org.junit.Before;
 import org.slf4j.Logger;
@@ -62,13 +60,13 @@ public class ConcurrentDeleteAndCreateCollectionTest extends SolrTestCaseJ4 {
     super.tearDown();
   }
   
-  public void testConcurrentCreateAndDeleteDoesNotFail() {
+  public void testConcurrentCreateAndDeleteDoesNotFail() throws IOException {
     final AtomicReference<Exception> failure = new AtomicReference<>();
     final int timeToRunSec = 30;
     final CreateDeleteCollectionThread[] threads = new CreateDeleteCollectionThread[10];
     for (int i = 0; i < threads.length; i++) {
       final String collectionName = "collection" + i;
-      uploadConfig(configset("configset-2"), collectionName);
+      solrCluster.uploadConfigSet(configset("configset-2"), collectionName);
       final String baseUrl = solrCluster.getJettySolrRunners().get(0).getBaseUrl().toString();
       final SolrClient solrClient = getHttpSolrClient(baseUrl);
       threads[i] = new CreateDeleteSearchCollectionThread("create-delete-search-" + i, collectionName, collectionName, 
@@ -81,9 +79,10 @@ public class ConcurrentDeleteAndCreateCollectionTest extends SolrTestCaseJ4 {
     assertNull("concurrent create and delete collection failed: " + failure.get(), failure.get());
   }
   
-  public void testConcurrentCreateAndDeleteOverTheSameConfig() {
+  public void testConcurrentCreateAndDeleteOverTheSameConfig() throws IOException {
     final String configName = "testconfig";
-    uploadConfig(configset("configset-2"), configName); // upload config once, to be used by all collections
+    // upload config once, to be used by all collections
+    solrCluster.uploadConfigSet(configset("configset-2"), configName);
     final String baseUrl = solrCluster.getJettySolrRunners().get(0).getBaseUrl().toString();
     final AtomicReference<Exception> failure = new AtomicReference<>();
     final int timeToRunSec = 30;
@@ -100,15 +99,7 @@ public class ConcurrentDeleteAndCreateCollectionTest extends SolrTestCaseJ4 {
 
     assertNull("concurrent create and delete collection failed: " + failure.get(), failure.get());
   }
-  
-  private void uploadConfig(Path configDir, String configName) {
-    try {
-      solrCluster.uploadConfigSet(configDir, configName);
-    } catch (IOException | KeeperException | InterruptedException e) {
-      throw new RuntimeException(e);
-    }
-  }
-  
+
   private void joinAll(final CreateDeleteCollectionThread[] threads) {
     for (CreateDeleteCollectionThread t : threads) {
       try {
diff --git a/solr/licenses/commons-compiler-3.0.11.jar.sha1 b/solr/licenses/commons-compiler-3.0.11.jar.sha1
new file mode 100644
index 0000000..16ac6e2
--- /dev/null
+++ b/solr/licenses/commons-compiler-3.0.11.jar.sha1
@@ -0,0 +1 @@
+f2a6ec7fbc929c9fc87ff8bb486c0574951c5b09
diff --git a/solr/licenses/commons-compiler-3.0.9.jar.sha1 b/solr/licenses/commons-compiler-3.0.9.jar.sha1
deleted file mode 100644
index d3cd9d2..0000000
--- a/solr/licenses/commons-compiler-3.0.9.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6aac3c03d02dcab0d59f77ff00b682f5320e54e9
diff --git a/solr/licenses/eigenbase-properties-1.1.5.jar.sha1 b/solr/licenses/eigenbase-properties-1.1.5.jar.sha1
deleted file mode 100644
index 2617c4d..0000000
--- a/solr/licenses/eigenbase-properties-1.1.5.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a941956b3a4664d0cf728ece06ba25cc2110a3aa
diff --git a/solr/licenses/eigenbase-properties-LICENSE-ASL.txt b/solr/licenses/eigenbase-properties-LICENSE-ASL.txt
deleted file mode 100644
index d645695..0000000
--- a/solr/licenses/eigenbase-properties-LICENSE-ASL.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed 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.
diff --git a/solr/licenses/eigenbase-properties-NOTICE.txt b/solr/licenses/eigenbase-properties-NOTICE.txt
deleted file mode 100644
index 95ee3fd..0000000
--- a/solr/licenses/eigenbase-properties-NOTICE.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-eigenbase-properties
-Copyright (C) 2012-2015, Julian Hyde
-
-This product includes software from the Eigenbase project, licensed from
-DynamoBI Corporation.
-
-Copyright (C) 2005 Dynamo BI Corporation
-
-===============================================================================
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this software 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.
diff --git a/solr/licenses/janino-3.0.11.jar.sha1 b/solr/licenses/janino-3.0.11.jar.sha1
new file mode 100644
index 0000000..dfbc384
--- /dev/null
+++ b/solr/licenses/janino-3.0.11.jar.sha1
@@ -0,0 +1 @@
+e699e368095379ba0402ea1780a87fcaea16e68f
diff --git a/solr/licenses/janino-3.0.9.jar.sha1 b/solr/licenses/janino-3.0.9.jar.sha1
deleted file mode 100644
index c5b66b0..0000000
--- a/solr/licenses/janino-3.0.9.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0ddfd261063f2e6300e4c884aeef5f145dd0b38d
diff --git a/solr/licenses/kerby-kdc-1.0.1.jar.sha1 b/solr/licenses/kerby-kdc-1.0.1.jar.sha1
deleted file mode 100644
index 5e5d939..0000000
--- a/solr/licenses/kerby-kdc-1.0.1.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1a65dfc7f5e5eccc15e44dbdb7c34ddb14a03a97
diff --git a/solr/licenses/kerby-kdc-LICENSE-ASL.txt b/solr/licenses/kerby-kdc-LICENSE-ASL.txt
deleted file mode 100644
index ad410e1..0000000
--- a/solr/licenses/kerby-kdc-LICENSE-ASL.txt
+++ /dev/null
@@ -1,201 +0,0 @@
-Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "{}"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright {yyyy} {name of copyright owner}
-
-   Licensed 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.
\ No newline at end of file
diff --git a/solr/licenses/kerby-kdc-NOTICE.txt b/solr/licenses/kerby-kdc-NOTICE.txt
deleted file mode 100644
index 373b85d..0000000
--- a/solr/licenses/kerby-kdc-NOTICE.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-Apache Kerby
-Copyright 2015-2016 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr/solrj/build.gradle b/solr/solrj/build.gradle
index a7f3315..35388b6 100644
--- a/solr/solrj/build.gradle
+++ b/solr/solrj/build.gradle
@@ -21,51 +21,40 @@ apply plugin: 'java-library'
 description = 'Solrj - Solr Java Client'
 
 dependencies {
-  api 'org.slf4j:slf4j-api'
-  implementation 'org.slf4j:jcl-over-slf4j'
+  implementation 'org.slf4j:slf4j-api'
+  runtimeOnly 'org.slf4j:jcl-over-slf4j'
 
-  api 'commons-io:commons-io'
-  api 'org.apache.commons:commons-math3'
+  implementation 'commons-io:commons-io'
+  implementation 'org.apache.commons:commons-math3'
 
   api 'org.eclipse.jetty.http2:http2-client'
-  api 'org.eclipse.jetty.http2:http2-http-client-transport'
-  api 'org.eclipse.jetty:jetty-util'
-  api 'org.eclipse.jetty:jetty-http'
-  api 'org.eclipse.jetty:jetty-alpn-java-client'
-  api 'org.eclipse.jetty:jetty-alpn-client'
+  implementation 'org.eclipse.jetty.http2:http2-http-client-transport'
+  implementation 'org.eclipse.jetty:jetty-client'
+  runtimeOnly 'org.eclipse.jetty:jetty-alpn-java-client'
 
   api('org.apache.httpcomponents:httpmime', {
     exclude group: "commons-codec", module: "commons-codec"
     exclude group: "commons-logging", module: "commons-logging"
   })
 
-  api 'io.netty:netty-buffer'
-  api 'io.netty:netty-codec'
-  api 'io.netty:netty-common'
-  api 'io.netty:netty-handler'
-  api 'io.netty:netty-resolver'
-  api 'io.netty:netty-transport'
-  api 'io.netty:netty-transport-native-epoll'
-  api 'io.netty:netty-transport-native-unix-common'
-
-  api('org.apache.zookeeper:zookeeper', {
+  implementation('org.apache.zookeeper:zookeeper', {
     exclude group: "org.apache.yetus", module: "audience-annotations"
-    exclude group: "io.netty", module: "netty-all"
     exclude group: "log4j", module: "log4j"
     exclude group: "org.slf4j", module: "slf4j-log4j12"
   })
 
   testImplementation project(':solr:test-framework')
   testImplementation 'org.eclipse.jetty:jetty-webapp'
-  testImplementation ('org.eclipse.jetty:jetty-alpn-java-server', {
+  testRuntimeOnly ('org.eclipse.jetty:jetty-alpn-java-server', {
     exclude group: "org.eclipse.jetty.alpn", module: "alpn-api"
   })
-  testImplementation 'org.objenesis:objenesis'
   testImplementation('org.mockito:mockito-core', {
     exclude group: "net.bytebuddy", module: "byte-buddy-agent"
   })
   testImplementation("org.apache.logging.log4j:log4j-slf4j-impl", {
     exclude group: "org.apache.logging.log4j", module: "log4j-api"
   })
-  testImplementation "org.hsqldb:hsqldb"
+  testRuntimeOnly "org.hsqldb:hsqldb" // runtime because via JDBC reflection
+  testImplementation 'org.apache.commons:commons-lang3'
+  testImplementation ('com.google.guava:guava') { transitive = false }
 }
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/eval/ConversionEvaluatorsTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/eval/ConversionEvaluatorsTest.java
index c0098b4..b39a3c0 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/eval/ConversionEvaluatorsTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/eval/ConversionEvaluatorsTest.java
@@ -21,7 +21,6 @@ import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.commons.collections4.map.HashedMap;
 import org.apache.solr.client.solrj.io.Tuple;
 import org.apache.solr.client.solrj.io.eval.ConversionEvaluator;
 import org.apache.solr.client.solrj.io.eval.RawValueEvaluator;
@@ -48,7 +47,7 @@ public class ConversionEvaluatorsTest {
     factory = new StreamFactory();
     factory.withFunctionName("convert", ConversionEvaluator.class).withFunctionName("raw", RawValueEvaluator.class);
 
-    values = new HashedMap<>();
+    values = new HashMap<>();
   }
 
   @Test
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/eval/TemporalEvaluatorsTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/eval/TemporalEvaluatorsTest.java
index 0273281..f8d9050 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/eval/TemporalEvaluatorsTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/eval/TemporalEvaluatorsTest.java
@@ -26,11 +26,11 @@ import java.time.ZoneOffset;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.GregorianCalendar;
+import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
 import java.util.TimeZone;
 
-import org.apache.commons.collections4.map.HashedMap;
 import org.apache.solr.client.solrj.io.Tuple;
 import org.apache.solr.client.solrj.io.eval.StreamEvaluator;
 import org.apache.solr.client.solrj.io.eval.TemporalEvaluatorDay;
@@ -80,7 +80,7 @@ public class TemporalEvaluatorsTest {
     factory.withFunctionName(TemporalEvaluatorQuarter.FUNCTION_NAME,   TemporalEvaluatorQuarter.class);
     factory.withFunctionName(TemporalEvaluatorDayOfQuarter.FUNCTION_NAME,   TemporalEvaluatorDayOfQuarter.class);
 
-    values = new HashedMap<>();
+    values = new HashMap<>();
   }
 
   @Test
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/ops/ConcatOperationTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/ops/ConcatOperationTest.java
index e2599dc..e5aa4a8 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/ops/ConcatOperationTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/ops/ConcatOperationTest.java
@@ -16,11 +16,11 @@
  */
 package org.apache.solr.client.solrj.io.stream.ops;
 
+import java.util.HashMap;
 import java.util.Map;
 
 import junit.framework.Assert;
 
-import org.apache.commons.collections4.map.HashedMap;
 import org.apache.solr.SolrTestCase;
 import org.apache.solr.client.solrj.io.Tuple;
 import org.apache.solr.client.solrj.io.ops.ConcatOperation;
@@ -42,7 +42,7 @@ public class ConcatOperationTest extends SolrTestCase {
     
     factory = new StreamFactory()
       .withFunctionName("concat", ConcatOperation.class);
-    values = new HashedMap<>();
+    values = new HashMap<>();
   }
     
   @Test
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/ops/OperationsTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/ops/OperationsTest.java
index 9a29917..9cddf7d 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/ops/OperationsTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/ops/OperationsTest.java
@@ -16,11 +16,11 @@
  */
 package org.apache.solr.client.solrj.io.stream.ops;
 
+import java.util.HashMap;
 import java.util.Map;
 
 import junit.framework.Assert;
 
-import org.apache.commons.collections4.map.HashedMap;
 import org.apache.solr.SolrTestCase;
 import org.apache.solr.client.solrj.io.Tuple;
 import org.apache.solr.client.solrj.io.ops.ReplaceOperation;
@@ -42,7 +42,7 @@ public class OperationsTest extends SolrTestCase {
     
     factory = new StreamFactory()
       .withFunctionName("replace", ReplaceOperation.class);
-    values = new HashedMap<>();
+    values = new HashMap<>();
   }
     
   @Test
diff --git a/solr/solrj/src/test/org/apache/solr/common/util/TestJsonRecordReader.java b/solr/solrj/src/test/org/apache/solr/common/util/TestJsonRecordReader.java
index adda675..b7b00db 100644
--- a/solr/solrj/src/test/org/apache/solr/common/util/TestJsonRecordReader.java
+++ b/solr/solrj/src/test/org/apache/solr/common/util/TestJsonRecordReader.java
@@ -25,7 +25,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicReference;
 
-import org.apache.commons.lang3.StringUtils;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.util.RecordingJSONParser;
 
@@ -130,7 +129,7 @@ public class TestJsonRecordReader extends SolrTestCaseJ4 {
     String json2 =
         " {\n" +
             "  \"id\" : \"345\",\n" +
-            "  \"payload\": \""+ StringUtils.repeat("0123456789", 819) +
+            "  \"payload\": \""+ "0123456789".repeat(819) +
             "\",\n" +
             "  \"description\": \"Testing /json/docs srcField 2\",\n" +
             "\n" +
diff --git a/solr/test-framework/build.gradle b/solr/test-framework/build.gradle
index ff8c91d..066790f 100644
--- a/solr/test-framework/build.gradle
+++ b/solr/test-framework/build.gradle
@@ -26,10 +26,18 @@ dependencies {
   api "org.apache.lucene:lucene-test-framework"
   api "org.apache.lucene:lucene-analysis-common"
 
-  api 'org.apache.logging.log4j:log4j-core'
-  api 'io.opentracing:opentracing-mock'
+  implementation('org.apache.zookeeper:zookeeper', {
+    exclude group: "org.apache.yetus", module: "audience-annotations"
+    exclude group: "log4j", module: "log4j"
+    exclude group: "org.slf4j", module: "slf4j-log4j12"
+  })
 
+  implementation 'commons-io:commons-io'
+  implementation 'org.apache.logging.log4j:log4j-core'
+  implementation 'io.opentracing:opentracing-noop'
+  implementation 'io.opentracing:opentracing-util'
+  implementation ('com.google.guava:guava') { transitive = false }
   implementation 'io.dropwizard.metrics:metrics-jetty9'
-  implementation 'com.lmax:disruptor'
+  implementation 'commons-cli:commons-cli'
 }
 
diff --git a/solr/test-framework/src/java/org/apache/solr/cloud/MiniSolrCloudCluster.java b/solr/test-framework/src/java/org/apache/solr/cloud/MiniSolrCloudCluster.java
index 8eb7d7a..677bf0a 100644
--- a/solr/test-framework/src/java/org/apache/solr/cloud/MiniSolrCloudCluster.java
+++ b/solr/test-framework/src/java/org/apache/solr/cloud/MiniSolrCloudCluster.java
@@ -531,7 +531,7 @@ public class MiniSolrCloudCluster {
    * @param configDir a path to the config set to upload
    * @param configName the name to give the configset
    */
-  public void uploadConfigSet(Path configDir, String configName) throws IOException, KeeperException, InterruptedException {
+  public void uploadConfigSet(Path configDir, String configName) throws IOException {
     try(SolrZkClient zkClient = new SolrZkClient(zkServer.getZkAddress(),
         AbstractZkTestCase.TIMEOUT, AbstractZkTestCase.TIMEOUT, null)) {
       ZkMaintenanceUtils.uploadToZK(zkClient, configDir, ZkMaintenanceUtils.CONFIGS_ZKNODE + "/" + configName, ZkMaintenanceUtils.UPLOAD_FILENAME_EXCLUDE_PATTERN);
diff --git a/versions.lock b/versions.lock
index d0a3a1b..8100dfa 100644
--- a/versions.lock
+++ b/versions.lock
@@ -5,11 +5,11 @@ com.carrotsearch.randomizedtesting:randomizedtesting-runner:2.7.6 (1 constraints
 com.cybozu.labs:langdetect:1.1-20120112 (1 constraints: 5c066d5e)
 com.drewnoakes:metadata-extractor:2.11.0 (1 constraints: 3605323b)
 com.epam:parso:2.0.11 (1 constraints: 36052c3b)
-com.esri.geometry:esri-geometry-api:2.2.0 (1 constraints: 0605fb35)
+com.esri.geometry:esri-geometry-api:2.2.0 (2 constraints: 6112842b)
 com.fasterxml.jackson:jackson-bom:2.12.3 (11 constraints: fdf28813)
-com.fasterxml.jackson.core:jackson-annotations:2.12.3 (6 constraints: ea7dde2b)
-com.fasterxml.jackson.core:jackson-core:2.12.3 (10 constraints: 66d74b2f)
-com.fasterxml.jackson.core:jackson-databind:2.12.3 (15 constraints: 3f27adcb)
+com.fasterxml.jackson.core:jackson-annotations:2.12.3 (8 constraints: 099c8008)
+com.fasterxml.jackson.core:jackson-core:2.12.3 (13 constraints: e304bc9b)
+com.fasterxml.jackson.core:jackson-databind:2.12.3 (17 constraints: 5e455fcf)
 com.fasterxml.jackson.dataformat:jackson-dataformat-smile:2.12.3 (2 constraints: f1137d82)
 com.fasterxml.woodstox:woodstox-core:6.2.4 (2 constraints: 4d1cac9f)
 com.github.ben-manes.caffeine:caffeine:2.9.2 (1 constraints: 0f051236)
@@ -31,9 +31,9 @@ com.google.cloud:google-cloud-storage:1.113.14 (2 constraints: 10143aa3)
 com.google.code.findbugs:annotations:3.0.1 (1 constraints: 0605fb35)
 com.google.code.findbugs:jsr305:3.0.2 (9 constraints: 057f5545)
 com.google.code.gson:gson:2.8.6 (4 constraints: 94389e56)
-com.google.errorprone:error_prone_annotations:2.9.0 (4 constraints: 9d2f3958)
+com.google.errorprone:error_prone_annotations:2.9.0 (5 constraints: fc3cbef5)
 com.google.guava:failureaccess:1.0.1 (1 constraints: e60fd595)
-com.google.guava:guava:25.1-jre (1 constraints: 4a06b047)
+com.google.guava:guava:25.1-jre (2 constraints: 0515c2b9)
 com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava (1 constraints: 8f1d45cb)
 com.google.http-client:google-http-client:1.39.2 (9 constraints: 0792de64)
 com.google.http-client:google-http-client-apache-v2:1.39.2 (2 constraints: bf20ed76)
@@ -42,7 +42,7 @@ com.google.http-client:google-http-client-gson:1.39.2 (4 constraints: 564300a0)
 com.google.http-client:google-http-client-jackson2:1.39.0 (2 constraints: 5915a1d6)
 com.google.j2objc:j2objc-annotations:1.3 (4 constraints: f52eb3b1)
 com.google.oauth-client:google-oauth-client:1.32.1 (3 constraints: ee252fa6)
-com.google.protobuf:protobuf-java:3.15.5 (6 constraints: dc58ddee)
+com.google.protobuf:protobuf-java:3.15.5 (7 constraints: 4869ba4c)
 com.google.protobuf:protobuf-java-util:3.15.5 (3 constraints: 2b248ae3)
 com.google.re2j:re2j:1.2 (1 constraints: a7041c2c)
 com.googlecode.juniversalchardet:juniversalchardet:1.0.3 (1 constraints: 0605f335)
@@ -50,16 +50,16 @@ com.googlecode.mp4parser:isoparser:1.1.22 (1 constraints: 38052d3b)
 com.healthmarketscience.jackcess:jackcess:3.0.1 (1 constraints: 0605fb35)
 com.healthmarketscience.jackcess:jackcess-encrypt:3.0.0 (1 constraints: 0505fa35)
 com.ibm.icu:icu4j:68.2 (2 constraints: 94144191)
-com.jayway.jsonpath:json-path:2.4.0 (1 constraints: 08050136)
+com.jayway.jsonpath:json-path:2.4.0 (2 constraints: 6512e02b)
 com.lmax:disruptor:3.4.2 (1 constraints: 0b050836)
 com.pff:java-libpst:0.8.1 (1 constraints: 0b050436)
 com.rometools:rome:1.12.2 (1 constraints: 3805313b)
 com.rometools:rome-utils:1.12.2 (1 constraints: 3805313b)
 com.tdunning:t-digest:3.1 (1 constraints: a804212c)
 commons-cli:commons-cli:1.4 (1 constraints: a9041e2c)
-commons-codec:commons-codec:1.13 (3 constraints: 88269b79)
+commons-codec:commons-codec:1.13 (4 constraints: b633162d)
 commons-collections:commons-collections:3.2.2 (1 constraints: 09050236)
-commons-io:commons-io:2.8.0 (1 constraints: 0c050d36)
+commons-io:commons-io:2.8.0 (4 constraints: 842b7e24)
 commons-logging:commons-logging:1.1.3 (3 constraints: 3b22c8bc)
 de.l3s.boilerpipe:boilerpipe:1.1.0 (1 constraints: 0405f335)
 io.dropwizard.metrics:metrics-core:4.1.5 (5 constraints: 2543e4c0)
@@ -70,18 +70,17 @@ io.dropwizard.metrics:metrics-jvm:4.1.5 (1 constraints: 0c050736)
 io.grpc:grpc-context:1.36.0 (3 constraints: 5a22231e)
 io.jaegertracing:jaeger-core:1.6.0 (1 constraints: 610d7b26)
 io.jaegertracing:jaeger-thrift:1.6.0 (1 constraints: 09050236)
-io.netty:netty-buffer:4.1.68.Final (6 constraints: 3b55c155)
-io.netty:netty-codec:4.1.68.Final (2 constraints: 0214fb82)
-io.netty:netty-common:4.1.68.Final (8 constraints: b56ee5df)
-io.netty:netty-handler:4.1.68.Final (2 constraints: 37173443)
-io.netty:netty-resolver:4.1.68.Final (3 constraints: b621e6d1)
-io.netty:netty-transport:4.1.68.Final (5 constraints: 8747d630)
-io.netty:netty-transport-native-epoll:4.1.68.Final (2 constraints: 37173443)
-io.netty:netty-transport-native-unix-common:4.1.68.Final (2 constraints: 0e1a9f06)
+io.netty:netty-buffer:4.1.68.Final (5 constraints: df4da774)
+io.netty:netty-codec:4.1.68.Final (1 constraints: a60ccb09)
+io.netty:netty-common:4.1.68.Final (7 constraints: 59675dcf)
+io.netty:netty-handler:4.1.68.Final (1 constraints: db0f158f)
+io.netty:netty-resolver:4.1.68.Final (2 constraints: 5a1a4732)
+io.netty:netty-transport:4.1.68.Final (4 constraints: 2b402b76)
+io.netty:netty-transport-native-epoll:4.1.68.Final (1 constraints: db0f158f)
+io.netty:netty-transport-native-unix-common:4.1.68.Final (1 constraints: b212fc1e)
 io.opencensus:opencensus-api:0.28.0 (5 constraints: 21426a37)
 io.opencensus:opencensus-contrib-http-util:0.28.0 (3 constraints: f7265f07)
 io.opentracing:opentracing-api:0.33.0 (5 constraints: 4d3cfe52)
-io.opentracing:opentracing-mock:0.33.0 (1 constraints: 3805343b)
 io.opentracing:opentracing-noop:0.33.0 (3 constraints: 7c2142bd)
 io.opentracing:opentracing-util:0.33.0 (3 constraints: f71f843b)
 io.prometheus:simpleclient:0.2.0 (3 constraints: fe242db8)
@@ -90,44 +89,43 @@ io.prometheus:simpleclient_httpserver:0.2.0 (1 constraints: 0405f135)
 io.sgr:s2-geometry-library-java:1.0.0 (2 constraints: b215dedf)
 javax.annotation:javax.annotation-api:1.3.2 (2 constraints: 031bd96b)
 javax.servlet:javax.servlet-api:3.1.0 (3 constraints: 75209943)
-junit:junit:4.13.1 (4 constraints: 5c32a906)
+junit:junit:4.13.1 (6 constraints: 154f6f23)
 net.arnx:jsonic:1.2.7 (2 constraints: db10d4d1)
-net.hydromatic:eigenbase-properties:1.1.5 (1 constraints: 0905f835)
 net.jcip:jcip-annotations:1.0 (1 constraints: 560ff165)
 net.sf.jopt-simple:jopt-simple:4.6 (1 constraints: 610a91b7)
 net.sourceforge.argparse4j:argparse4j:0.8.1 (1 constraints: 0b050436)
 net.thisptr:jackson-jq:0.0.8 (1 constraints: 0a05f335)
 org.antlr:antlr4-runtime:4.5.1-1 (2 constraints: 9115f6e5)
 org.apache.calcite:calcite-core:1.27.0 (1 constraints: 3c05423b)
-org.apache.calcite:calcite-linq4j:1.27.0 (1 constraints: 3c05423b)
-org.apache.calcite.avatica:avatica-core:1.18.0 (1 constraints: 3c05413b)
+org.apache.calcite:calcite-linq4j:1.27.0 (2 constraints: cd12134c)
+org.apache.calcite.avatica:avatica-core:1.18.0 (3 constraints: 0721eacd)
 org.apache.commons:commons-collections4:4.4 (1 constraints: ac04272c)
 org.apache.commons:commons-compress:1.21 (1 constraints: d804f430)
 org.apache.commons:commons-configuration2:2.1.1 (1 constraints: 0605f935)
 org.apache.commons:commons-csv:1.7 (1 constraints: ac04212c)
 org.apache.commons:commons-exec:1.3 (1 constraints: a8041d2c)
-org.apache.commons:commons-lang3:3.9 (3 constraints: 2b24bbb0)
+org.apache.commons:commons-lang3:3.9 (4 constraints: 2f31aa08)
 org.apache.commons:commons-math3:3.6.1 (2 constraints: 670ffb89)
 org.apache.commons:commons-text:1.6 (1 constraints: ab04202c)
-org.apache.curator:curator-client:2.13.0 (1 constraints: 3805383b)
-org.apache.curator:curator-framework:2.13.0 (1 constraints: 3805383b)
+org.apache.curator:curator-client:2.13.0 (2 constraints: 401576c5)
+org.apache.curator:curator-framework:2.13.0 (2 constraints: 5d141e96)
 org.apache.curator:curator-recipes:2.13.0 (1 constraints: 3805383b)
 org.apache.hadoop:hadoop-annotations:3.2.0 (1 constraints: 07050036)
 org.apache.hadoop:hadoop-auth:3.2.0 (1 constraints: 07050036)
 org.apache.hadoop:hadoop-common:3.2.0 (1 constraints: 07050036)
 org.apache.hadoop:hadoop-hdfs-client:3.2.0 (1 constraints: 07050036)
 org.apache.htrace:htrace-core4:4.1.0-incubating (1 constraints: 58090086)
-org.apache.httpcomponents:httpclient:4.5.13 (7 constraints: af69bc2b)
-org.apache.httpcomponents:httpcore:4.4.14 (6 constraints: d95cb271)
+org.apache.httpcomponents:httpclient:4.5.13 (8 constraints: 237a2994)
+org.apache.httpcomponents:httpcore:4.4.14 (7 constraints: 756d28c6)
 org.apache.httpcomponents:httpmime:4.5.10 (1 constraints: 3c054b3b)
 org.apache.james:apache-mime4j-core:0.8.3 (1 constraints: 0d050636)
 org.apache.james:apache-mime4j-dom:0.8.3 (1 constraints: 0d050636)
-org.apache.kerby:kerb-core:1.0.1 (3 constraints: f11c583a)
-org.apache.kerby:kerb-crypto:1.0.1 (1 constraints: 860b05e6)
-org.apache.kerby:kerb-util:1.0.1 (1 constraints: 0405f135)
-org.apache.kerby:kerby-asn1:1.0.1 (2 constraints: 001155df)
-org.apache.kerby:kerby-config:1.0.1 (1 constraints: 860b05e6)
-org.apache.kerby:kerby-pkix:1.0.1 (2 constraints: 741065ca)
+org.apache.kerby:kerb-core:1.0.1 (5 constraints: 683677dd)
+org.apache.kerby:kerb-crypto:1.0.1 (2 constraints: d617fe96)
+org.apache.kerby:kerb-util:1.0.1 (3 constraints: 1a1ddb4c)
+org.apache.kerby:kerby-asn1:1.0.1 (1 constraints: fd0be9f4)
+org.apache.kerby:kerby-config:1.0.1 (4 constraints: 4d3182b9)
+org.apache.kerby:kerby-pkix:1.0.1 (1 constraints: 710bfce4)
 org.apache.kerby:kerby-util:1.0.1 (2 constraints: 6518bdb6)
 org.apache.logging.log4j:log4j-api:2.14.1 (4 constraints: d033fab0)
 org.apache.logging.log4j:log4j-core:2.14.1 (2 constraints: 0d16b624)
@@ -173,9 +171,9 @@ org.apache.tika:tika-java7:1.27 (1 constraints: de04fa30)
 org.apache.tika:tika-parsers:1.27 (1 constraints: de04fa30)
 org.apache.tika:tika-xmp:1.27 (1 constraints: de04fa30)
 org.apache.xmlbeans:xmlbeans:3.1.0 (1 constraints: 0605fd35)
-org.apache.zookeeper:zookeeper:3.7.0 (1 constraints: 0c050f36)
+org.apache.zookeeper:zookeeper:3.7.0 (2 constraints: 9e13f25e)
 org.apache.zookeeper:zookeeper-jute:3.7.0 (1 constraints: 8a0d3a28)
-org.apiguardian:apiguardian-api:1.1.0 (1 constraints: 0405f335)
+org.apiguardian:apiguardian-api:1.1.0 (3 constraints: 5f208479)
 org.aspectj:aspectjrt:1.8.0 (1 constraints: 0b050836)
 org.bitbucket.b_c:jose4j:0.7.7 (1 constraints: 10050736)
 org.bouncycastle:bcmail-jdk15on:1.69 (1 constraints: e4040431)
@@ -188,16 +186,16 @@ org.carrot2:morfologik-polish:2.1.5 (1 constraints: cf12501e)
 org.carrot2:morfologik-stemming:2.1.5 (2 constraints: d01f1300)
 org.ccil.cowan.tagsoup:tagsoup:1.2.1 (1 constraints: 0605f735)
 org.checkerframework:checker-compat-qual:2.5.5 (1 constraints: f00fed95)
-org.checkerframework:checker-qual:3.10.0 (2 constraints: 490f9491)
-org.codehaus.janino:commons-compiler:3.0.9 (2 constraints: d910f7d1)
-org.codehaus.janino:janino:3.0.9 (1 constraints: 0e050336)
+org.checkerframework:checker-qual:3.10.0 (4 constraints: 082ba36f)
+org.codehaus.janino:commons-compiler:3.0.11 (2 constraints: 81192719)
+org.codehaus.janino:janino:3.0.11 (1 constraints: 8d0d3f3a)
 org.codehaus.mojo:animal-sniffer-annotations:1.14 (1 constraints: ea09d5aa)
 org.codehaus.woodstox:stax2-api:4.2.1 (2 constraints: 36152eaf)
-org.eclipse.jetty:jetty-alpn-client:9.4.44.v20210927 (3 constraints: d72c7301)
+org.eclipse.jetty:jetty-alpn-client:9.4.44.v20210927 (2 constraints: 5625951d)
 org.eclipse.jetty:jetty-alpn-java-client:9.4.44.v20210927 (1 constraints: 82072e7d)
 org.eclipse.jetty:jetty-alpn-java-server:9.4.44.v20210927 (1 constraints: 82072e7d)
 org.eclipse.jetty:jetty-alpn-server:9.4.44.v20210927 (2 constraints: 271b20de)
-org.eclipse.jetty:jetty-client:9.4.44.v20210927 (1 constraints: d0171eae)
+org.eclipse.jetty:jetty-client:9.4.44.v20210927 (2 constraints: 511f4040)
 org.eclipse.jetty:jetty-continuation:9.4.44.v20210927 (2 constraints: 611890fb)
 org.eclipse.jetty:jetty-deploy:9.4.44.v20210927 (1 constraints: 82072e7d)
 org.eclipse.jetty:jetty-http:9.4.44.v20210927 (5 constraints: 9549eb52)
@@ -230,7 +228,7 @@ org.ow2.asm:asm-commons:7.2 (1 constraints: 6b0f7267)
 org.quicktheories:quicktheories:0.26 (1 constraints: dc04f530)
 org.reactivestreams:reactive-streams:1.0.3 (3 constraints: 3c2b02fd)
 org.slf4j:jcl-over-slf4j:1.7.24 (1 constraints: 4005473b)
-org.slf4j:slf4j-api:1.7.24 (18 constraints: 90e2b335)
+org.slf4j:slf4j-api:1.7.24 (22 constraints: 9c20c409)
 org.tallison:jmatio:1.5 (1 constraints: aa041f2c)
 org.threeten:threetenbp:1.5.0 (4 constraints: f82b9e86)
 org.tukaani:xz:1.8 (1 constraints: ad04222c)
@@ -299,6 +297,7 @@ com.vaadin.external.google:android-json:0.0.20131108.vaadin1 (1 constraints: 340
 io.github.microutils:kotlin-logging:2.0.6 (1 constraints: be0e9d62)
 io.github.microutils:kotlin-logging-jvm:2.0.6 (1 constraints: 810f877c)
 io.micrometer:micrometer-core:1.5.14 (1 constraints: fc161b19)
+io.opentracing:opentracing-mock:0.33.0 (1 constraints: 3805343b)
 jakarta.activation:jakarta.activation-api:1.2.1 (2 constraints: b928fbbd)
 jakarta.annotation:jakarta.annotation-api:1.3.5 (1 constraints: 3a131133)
 jakarta.servlet:jakarta.servlet-api:4.0.4 (1 constraints: 961568b9)
@@ -312,13 +311,12 @@ net.minidev:json-smart:2.3 (1 constraints: ae0de552)
 no.nav.security:mock-oauth2-server:0.3.3 (1 constraints: 0805f735)
 org.apache.hadoop:hadoop-hdfs:3.2.0 (1 constraints: 07050036)
 org.apache.hadoop:hadoop-minikdc:3.2.0 (1 constraints: 07050036)
-org.apache.kerby:kerb-admin:1.0.1 (1 constraints: 0405f135)
-org.apache.kerby:kerb-client:1.0.1 (1 constraints: 0405f135)
-org.apache.kerby:kerb-common:1.0.1 (1 constraints: 0405f135)
-org.apache.kerby:kerb-identity:1.0.1 (1 constraints: 0405f135)
-org.apache.kerby:kerb-server:1.0.1 (1 constraints: 0405f135)
-org.apache.kerby:kerb-simplekdc:1.0.1 (1 constraints: 0405f135)
-org.apache.kerby:kerby-kdc:1.0.1 (1 constraints: 0405f135)
+org.apache.kerby:kerb-admin:1.0.1 (1 constraints: 840d892f)
+org.apache.kerby:kerb-client:1.0.1 (1 constraints: 840d892f)
+org.apache.kerby:kerb-common:1.0.1 (2 constraints: a51841ca)
+org.apache.kerby:kerb-identity:1.0.1 (1 constraints: 5f0cb602)
+org.apache.kerby:kerb-server:1.0.1 (1 constraints: d10b65f2)
+org.apache.kerby:kerb-simplekdc:1.0.1 (1 constraints: dc0d7e3e)
 org.apache.logging.log4j:log4j-1.2-api:2.14.1 (1 constraints: 3a053c3b)
 org.asciidoctor:asciidoctorj:1.6.2 (1 constraints: 0b050436)
 org.asciidoctor:asciidoctorj-api:1.6.2 (1 constraints: e30cfb0d)
diff --git a/versions.props b/versions.props
index 18faed9..7e5676e 100644
--- a/versions.props
+++ b/versions.props
@@ -66,7 +66,6 @@ javax.servlet:javax.servlet-api=3.1.0
 junit:junit=4.13.1
 net.arnx:jsonic=1.2.7
 net.bytebuddy:byte-buddy=1.9.3
-net.hydromatic:eigenbase-properties=1.1.5
 net.sourceforge.argparse4j:argparse4j=0.8.1
 net.thisptr:jackson-jq=0.0.8
 no.nav.security:mock-oauth2-server=0.3.3