diff --git a/external_plugin_deps.bzl b/external_plugin_deps.bzl
index ea71773..c32388c 100644
--- a/external_plugin_deps.bzl
+++ b/external_plugin_deps.bzl
@@ -8,19 +8,19 @@
     )
 
     # Ensure artifacts compatibility by selecting them from the Bill Of Materials
-    # https://search.maven.org/artifact/org.testcontainers/testcontainers/1.19.7/pom
-    TESTCONTAINERS_VERSION = "1.19.7"
+    # https://search.maven.org/artifact/org.testcontainers/testcontainers/1.20.2/pom
+    TESTCONTAINERS_VERSION = "1.20.2"
 
     maven_jar(
         name = "testcontainers",
         artifact = "org.testcontainers:testcontainers:" + TESTCONTAINERS_VERSION,
-        sha1 = "2dd7b1497fc444755582b0efc88636c4d299601f",
+        sha1 = "3b693fb878f88974ee07bd149fb0b75b0f2b5cf0",
     )
 
     maven_jar(
         name = "testcontainers-elasticsearch",
         artifact = "org.testcontainers:elasticsearch:" + TESTCONTAINERS_VERSION,
-        sha1 = "8cd9f4ae67c9299143eb718541ff544b66273283",
+        sha1 = "e148d6ad75011012363388855f121fe6d6dae092",
     )
 
     maven_jar(
@@ -29,28 +29,28 @@
         sha1 = "92edc22a9ab2f3e17c9bf700aaee377d50e8b530",
     )
 
-    DOCKER_JAVA_VERS = "3.3.6"
+    DOCKER_JAVA_VERS = "3.4.0"
 
     maven_jar(
         name = "docker-java-api",
         artifact = "com.github.docker-java:docker-java-api:" + DOCKER_JAVA_VERS,
-        sha1 = "8e152880bfe595c81a25501e21a6d7b1d4df97be",
+        sha1 = "9ef23dcc93693f15e69b64632be096c38e31bc44",
     )
 
     maven_jar(
         name = "docker-java-transport",
         artifact = "com.github.docker-java:docker-java-transport:" + DOCKER_JAVA_VERS,
-        sha1 = "0d536d16a297f9139b833955390a3d581e336e67",
+        sha1 = "c058705684d782effc4b2edfdef1a87544ba4af8",
     )
 
     maven_jar(
         name = "docker-java-transport-zerodep",
         artifact = "com.github.docker-java:docker-java-transport-zerodep:" + DOCKER_JAVA_VERS,
-        sha1 = "c9cde0239ce03376f6dfd0465bd461853af22196",
+        sha1 = "c4ce6d8695cfdb0027872f99cc20f8f679f8a969",
     )
 
     # Match version used in docker-java-transport
-    # https://search.maven.org/artifact/com.github.docker-java/docker-java-transport/3.3.6/pom
+    # https://search.maven.org/artifact/com.github.docker-java/docker-java-transport/3.4.0/pom
     maven_jar(
         name = "jna",
         artifact = "net.java.dev.jna:jna:5.13.0",
@@ -58,7 +58,7 @@
     )
 
     # Match jackson.version from docker-java
-    # https://search.maven.org/artifact/com.github.docker-java/docker-java-parent/3.3.6/pom
+    # https://search.maven.org/artifact/com.github.docker-java/docker-java-parent/3.4.0/pom
     maven_jar(
         name = "jackson-annotations",
         artifact = "com.fasterxml.jackson.core:jackson-annotations:2.10.3",
diff --git a/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java b/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
index 85ce166..dfa719c 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
@@ -312,7 +312,7 @@
           contentType.toString().equalsIgnoreCase(ContentType.APPLICATION_JSON.toString()),
           String.format("Expected %s, but was: %s", ContentType.APPLICATION_JSON, contentType));
       String responseStr = EntityUtils.toString(response.getEntity());
-      JsonObject responseJson = (JsonObject) new JsonParser().parse(responseStr);
+      JsonObject responseJson = JsonParser.parseString(responseStr).getAsJsonObject();
       boolean hasErrors = responseJson.get("errors").getAsBoolean();
       if (hasErrors) {
         logger.atSevere().log("Response with errors: %s", responseJson);
@@ -341,7 +341,7 @@
   }
 
   protected String getSearch(SearchSourceBuilder searchSource, JsonArray sortArray) {
-    JsonObject search = new JsonParser().parse(searchSource.toString()).getAsJsonObject();
+    JsonObject search = JsonParser.parseString(searchSource.toString()).getAsJsonObject();
     search.add("sort", sortArray);
     return gson.toJson(search);
   }
@@ -455,7 +455,7 @@
         if (statusLine.getStatusCode() == HttpStatus.SC_OK) {
           String content = getContent(response);
           JsonObject obj =
-              new JsonParser().parse(content).getAsJsonObject().getAsJsonObject("hits");
+              JsonParser.parseString(content).getAsJsonObject().getAsJsonObject("hits");
           if (obj.get("hits") != null) {
             JsonArray json = obj.getAsJsonArray("hits");
             ImmutableList.Builder<T> results = ImmutableList.builderWithExpectedSize(json.size());
@@ -471,7 +471,7 @@
               searchAfter = hit.getAsJsonArray("sort");
             }
             JsonArray finalSearchAfter = searchAfter;
-            return new ListResultSet<T>(results.build()) {
+            return new ListResultSet<>(results.build()) {
               @Override
               public Object searchAfter() {
                 return finalSearchAfter;
diff --git a/src/main/java/com/google/gerrit/elasticsearch/ElasticIndexVersionDiscovery.java b/src/main/java/com/google/gerrit/elasticsearch/ElasticIndexVersionDiscovery.java
index 4217f45..9e670ee 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/ElasticIndexVersionDiscovery.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/ElasticIndexVersionDiscovery.java
@@ -53,9 +53,9 @@
       throw new IOException(message);
     }
 
-    return new JsonParser()
-        .parse(AbstractElasticIndex.getContent(response)).getAsJsonObject().entrySet().stream()
-            .map(e -> e.getKey().replace(name, ""))
-            .collect(toList());
+    return JsonParser.parseString(AbstractElasticIndex.getContent(response)).getAsJsonObject()
+        .entrySet().stream()
+        .map(e -> e.getKey().replace(name, ""))
+        .collect(toList());
   }
 }
diff --git a/src/main/java/com/google/gerrit/elasticsearch/ElasticRestClientProvider.java b/src/main/java/com/google/gerrit/elasticsearch/ElasticRestClientProvider.java
index 9caa14d..180d135 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/ElasticRestClientProvider.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/ElasticRestClientProvider.java
@@ -116,8 +116,7 @@
         throw new FailedToGetVersion(statusLine);
       }
       String version =
-          new JsonParser()
-              .parse(AbstractElasticIndex.getContent(response))
+          JsonParser.parseString(AbstractElasticIndex.getContent(response))
               .getAsJsonObject()
               .get("version")
               .getAsJsonObject()
@@ -163,5 +162,6 @@
     }
   }
 
-  protected void configureHttpClientBuilder(HttpAsyncClientBuilder httpClientBuilder) {}
+  protected void configureHttpClientBuilder(
+      @SuppressWarnings("unused") HttpAsyncClientBuilder httpClientBuilder) {}
 }
diff --git a/src/main/java/com/google/gerrit/elasticsearch/ElasticVersion.java b/src/main/java/com/google/gerrit/elasticsearch/ElasticVersion.java
index 43cee5a..1427e05 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/ElasticVersion.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/ElasticVersion.java
@@ -18,8 +18,8 @@
 import java.util.regex.Pattern;
 
 public enum ElasticVersion {
-  V7_17("7.17.*"),
-  V8_15("8.15.*");
+  V7("7\\.\\d+\\.\\d+.*"),
+  V8("8\\.\\d+\\.\\d+.*");
 
   private final String version;
   private final Pattern pattern;
diff --git a/src/test/java/com/google/gerrit/elasticsearch/ElasticAbstractQueryChangesTest.java b/src/test/java/com/google/gerrit/elasticsearch/ElasticAbstractQueryChangesTest.java
index 8a0af62..3182325 100644
--- a/src/test/java/com/google/gerrit/elasticsearch/ElasticAbstractQueryChangesTest.java
+++ b/src/test/java/com/google/gerrit/elasticsearch/ElasticAbstractQueryChangesTest.java
@@ -90,11 +90,13 @@
     Project.NameKey project = Project.nameKey("repo");
     TestRepository<Repository> repo = createAndOpenProject(project);
     Change c = insert(project, newChangeWithStatus(repo, Change.Status.NEW));
-    gApi.changes().id(c.getChangeId()).index();
+    gApi.changes().id(c.getProject().get(), c.getChangeId()).index();
 
     ElasticTestUtils.closeIndex(client, container, testName);
     StorageException thrown =
-        assertThrows(StorageException.class, () -> gApi.changes().id(c.getChangeId()).index());
+        assertThrows(
+            StorageException.class,
+            () -> gApi.changes().id(c.getProject().get(), c.getChangeId()).index());
     assertThat(thrown).hasMessageThat().contains("Failed to reindex change");
   }
 
diff --git a/src/test/java/com/google/gerrit/elasticsearch/ElasticContainer.java b/src/test/java/com/google/gerrit/elasticsearch/ElasticContainer.java
index 68dca7f..36f91cc 100644
--- a/src/test/java/com/google/gerrit/elasticsearch/ElasticContainer.java
+++ b/src/test/java/com/google/gerrit/elasticsearch/ElasticContainer.java
@@ -27,9 +27,9 @@
 /* Helper class for running ES integration tests in docker container */
 public class ElasticContainer extends ElasticsearchContainer {
   private static FluentLogger logger = FluentLogger.forEnclosingClass();
-  private static final int ELASTICSEARCH_DEFAULT_PORT = 9200;
 
   public static ElasticContainer createAndStart(ElasticVersion version) {
+    @SuppressWarnings("resource")
     ElasticContainer container = new ElasticContainer(version);
     try {
       Path certs = Path.of("/usr/share/elasticsearch/config/certs");
@@ -89,9 +89,9 @@
   private static DockerImageName getImageName(ElasticVersion version) {
     DockerImageName image = DockerImageName.parse("docker.elastic.co/elasticsearch/elasticsearch");
     switch (version) {
-      case V7_17:
+      case V7:
         return image.withTag("7.17.24");
-      case V8_15:
+      case V8:
         return image.withTag("8.15.2");
     }
     throw new IllegalStateException("No tests for version: " + version.name());
diff --git a/src/test/java/com/google/gerrit/elasticsearch/ElasticV7QueryAccountsTest.java b/src/test/java/com/google/gerrit/elasticsearch/ElasticV7QueryAccountsTest.java
index 5e35b11..eb16af5 100644
--- a/src/test/java/com/google/gerrit/elasticsearch/ElasticV7QueryAccountsTest.java
+++ b/src/test/java/com/google/gerrit/elasticsearch/ElasticV7QueryAccountsTest.java
@@ -19,6 +19,6 @@
 public class ElasticV7QueryAccountsTest extends ElasticAbstractQueryAccountsTest {
   @BeforeClass
   public static void startIndexService() {
-    startIndexService(ElasticVersion.V7_17);
+    startIndexService(ElasticVersion.V7);
   }
 }
diff --git a/src/test/java/com/google/gerrit/elasticsearch/ElasticV7QueryChangesTest.java b/src/test/java/com/google/gerrit/elasticsearch/ElasticV7QueryChangesTest.java
index 3ce57a1..a319bfe 100644
--- a/src/test/java/com/google/gerrit/elasticsearch/ElasticV7QueryChangesTest.java
+++ b/src/test/java/com/google/gerrit/elasticsearch/ElasticV7QueryChangesTest.java
@@ -19,6 +19,6 @@
 public class ElasticV7QueryChangesTest extends ElasticAbstractQueryChangesTest {
   @BeforeClass
   public static void startIndexService() {
-    startIndexService(ElasticVersion.V7_17);
+    startIndexService(ElasticVersion.V7);
   }
 }
diff --git a/src/test/java/com/google/gerrit/elasticsearch/ElasticV7QueryGroupsTest.java b/src/test/java/com/google/gerrit/elasticsearch/ElasticV7QueryGroupsTest.java
index 54c2b12..fd77ea7 100644
--- a/src/test/java/com/google/gerrit/elasticsearch/ElasticV7QueryGroupsTest.java
+++ b/src/test/java/com/google/gerrit/elasticsearch/ElasticV7QueryGroupsTest.java
@@ -19,6 +19,6 @@
 public class ElasticV7QueryGroupsTest extends ElasticAbstractQueryGroupsTest {
   @BeforeClass
   public static void startIndexService() {
-    startIndexService(ElasticVersion.V7_17);
+    startIndexService(ElasticVersion.V7);
   }
 }
diff --git a/src/test/java/com/google/gerrit/elasticsearch/ElasticV7QueryProjectsTest.java b/src/test/java/com/google/gerrit/elasticsearch/ElasticV7QueryProjectsTest.java
index db9f1d0..dd2e8b0 100644
--- a/src/test/java/com/google/gerrit/elasticsearch/ElasticV7QueryProjectsTest.java
+++ b/src/test/java/com/google/gerrit/elasticsearch/ElasticV7QueryProjectsTest.java
@@ -19,6 +19,6 @@
 public class ElasticV7QueryProjectsTest extends ElasticAbstractQueryProjectsTest {
   @BeforeClass
   public static void startIndexService() {
-    startIndexService(ElasticVersion.V7_17);
+    startIndexService(ElasticVersion.V7);
   }
 }
diff --git a/src/test/java/com/google/gerrit/elasticsearch/ElasticV8QueryAccountsTest.java b/src/test/java/com/google/gerrit/elasticsearch/ElasticV8QueryAccountsTest.java
index d3874b8..4ea1b06 100644
--- a/src/test/java/com/google/gerrit/elasticsearch/ElasticV8QueryAccountsTest.java
+++ b/src/test/java/com/google/gerrit/elasticsearch/ElasticV8QueryAccountsTest.java
@@ -19,6 +19,6 @@
 public class ElasticV8QueryAccountsTest extends ElasticAbstractQueryAccountsTest {
   @BeforeClass
   public static void startIndexService() {
-    startIndexService(ElasticVersion.V8_15);
+    startIndexService(ElasticVersion.V8);
   }
 }
diff --git a/src/test/java/com/google/gerrit/elasticsearch/ElasticV8QueryChangesTest.java b/src/test/java/com/google/gerrit/elasticsearch/ElasticV8QueryChangesTest.java
index 6f8d4b0..c4622fd 100644
--- a/src/test/java/com/google/gerrit/elasticsearch/ElasticV8QueryChangesTest.java
+++ b/src/test/java/com/google/gerrit/elasticsearch/ElasticV8QueryChangesTest.java
@@ -19,6 +19,6 @@
 public class ElasticV8QueryChangesTest extends ElasticAbstractQueryChangesTest {
   @BeforeClass
   public static void startIndexService() {
-    startIndexService(ElasticVersion.V8_15);
+    startIndexService(ElasticVersion.V8);
   }
 }
diff --git a/src/test/java/com/google/gerrit/elasticsearch/ElasticV8QueryGroupsTest.java b/src/test/java/com/google/gerrit/elasticsearch/ElasticV8QueryGroupsTest.java
index a8dfc7e..e18e07a 100644
--- a/src/test/java/com/google/gerrit/elasticsearch/ElasticV8QueryGroupsTest.java
+++ b/src/test/java/com/google/gerrit/elasticsearch/ElasticV8QueryGroupsTest.java
@@ -19,6 +19,6 @@
 public class ElasticV8QueryGroupsTest extends ElasticAbstractQueryGroupsTest {
   @BeforeClass
   public static void startIndexService() {
-    startIndexService(ElasticVersion.V8_15);
+    startIndexService(ElasticVersion.V8);
   }
 }
diff --git a/src/test/java/com/google/gerrit/elasticsearch/ElasticV8QueryProjectsTest.java b/src/test/java/com/google/gerrit/elasticsearch/ElasticV8QueryProjectsTest.java
index 1a5e3c7..9277b4b 100644
--- a/src/test/java/com/google/gerrit/elasticsearch/ElasticV8QueryProjectsTest.java
+++ b/src/test/java/com/google/gerrit/elasticsearch/ElasticV8QueryProjectsTest.java
@@ -19,6 +19,6 @@
 public class ElasticV8QueryProjectsTest extends ElasticAbstractQueryProjectsTest {
   @BeforeClass
   public static void startIndexService() {
-    startIndexService(ElasticVersion.V8_15);
+    startIndexService(ElasticVersion.V8);
   }
 }
diff --git a/src/test/java/com/google/gerrit/elasticsearch/ElasticVersionTest.java b/src/test/java/com/google/gerrit/elasticsearch/ElasticVersionTest.java
index a0c0ba1..aa5fb72 100644
--- a/src/test/java/com/google/gerrit/elasticsearch/ElasticVersionTest.java
+++ b/src/test/java/com/google/gerrit/elasticsearch/ElasticVersionTest.java
@@ -22,12 +22,25 @@
 public class ElasticVersionTest {
   @Test
   public void supportedVersion() throws Exception {
-    assertThat(ElasticVersion.forVersion("7.17.0")).isEqualTo(ElasticVersion.V7_17);
-    assertThat(ElasticVersion.forVersion("7.17.1")).isEqualTo(ElasticVersion.V7_17);
+    assertThat(ElasticVersion.forVersion("7.0.0-alpha1")).isEqualTo(ElasticVersion.V7);
+    assertThat(ElasticVersion.forVersion("7.0.0-beta1")).isEqualTo(ElasticVersion.V7);
+    assertThat(ElasticVersion.forVersion("7.0.0-rc2")).isEqualTo(ElasticVersion.V7);
+    assertThat(ElasticVersion.forVersion("7.0.10")).isEqualTo(ElasticVersion.V7);
+    assertThat(ElasticVersion.forVersion("7.16.0")).isEqualTo(ElasticVersion.V7);
+    assertThat(ElasticVersion.forVersion("7.16.1")).isEqualTo(ElasticVersion.V7);
+    assertThat(ElasticVersion.forVersion("7.17.0")).isEqualTo(ElasticVersion.V7);
+    assertThat(ElasticVersion.forVersion("7.17.1")).isEqualTo(ElasticVersion.V7);
 
-    assertThat(ElasticVersion.forVersion("8.15.0")).isEqualTo(ElasticVersion.V8_15);
-    assertThat(ElasticVersion.forVersion("8.15.1")).isEqualTo(ElasticVersion.V8_15);
-    assertThat(ElasticVersion.forVersion("8.15.2")).isEqualTo(ElasticVersion.V8_15);
+    assertThat(ElasticVersion.forVersion("8.0.0-alpha1")).isEqualTo(ElasticVersion.V8);
+    assertThat(ElasticVersion.forVersion("8.0.0-beta1")).isEqualTo(ElasticVersion.V8);
+    assertThat(ElasticVersion.forVersion("8.0.0-rc2")).isEqualTo(ElasticVersion.V8);
+    assertThat(ElasticVersion.forVersion("8.0.10")).isEqualTo(ElasticVersion.V8);
+    assertThat(ElasticVersion.forVersion("8.9.0")).isEqualTo(ElasticVersion.V8);
+    assertThat(ElasticVersion.forVersion("8.9.1")).isEqualTo(ElasticVersion.V8);
+    assertThat(ElasticVersion.forVersion("8.9.2")).isEqualTo(ElasticVersion.V8);
+    assertThat(ElasticVersion.forVersion("8.15.0")).isEqualTo(ElasticVersion.V8);
+    assertThat(ElasticVersion.forVersion("8.15.1")).isEqualTo(ElasticVersion.V8);
+    assertThat(ElasticVersion.forVersion("8.15.2")).isEqualTo(ElasticVersion.V8);
   }
 
   @Test
