diff --git a/src/main/java/com/googlesource/gerrit/plugins/manager/repository/JenkinsCiPluginsRepository.java b/src/main/java/com/googlesource/gerrit/plugins/manager/repository/JenkinsCiPluginsRepository.java
index 192bbe5..d84eda5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/manager/repository/JenkinsCiPluginsRepository.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/manager/repository/JenkinsCiPluginsRepository.java
@@ -16,6 +16,7 @@
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.flogger.FluentLogger;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
@@ -261,10 +262,11 @@
     }
   }
 
-  private String fixPluginNameForMavenBuilds(String[] pluginPathParts) {
+  @VisibleForTesting
+  static String fixPluginNameForMavenBuilds(String[] pluginPathParts) {
     String mavenPluginFilename =
         StringUtils.substringBeforeLast(pluginPathParts[pluginPathParts.length - 1], ".");
-    int versionDelim = mavenPluginFilename.indexOf('-');
+    int versionDelim = mavenPluginFilename.lastIndexOf('-');
     return versionDelim > 0 ? mavenPluginFilename.substring(0, versionDelim) : mavenPluginFilename;
   }
 
@@ -292,7 +294,8 @@
     return pluginJsParts[filePos].substring(0, jsExtPos);
   }
 
-  private boolean isMavenBuild(String[] pluginPathParts) {
+  @VisibleForTesting
+  static boolean isMavenBuild(String[] pluginPathParts) {
     return pluginPathParts[pluginPathParts.length - 2].equals("target");
   }
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/manager/repository/PluginsCheckMavenNamingTest.java b/src/test/java/com/googlesource/gerrit/plugins/manager/repository/PluginsCheckMavenNamingTest.java
new file mode 100644
index 0000000..5d52844
--- /dev/null
+++ b/src/test/java/com/googlesource/gerrit/plugins/manager/repository/PluginsCheckMavenNamingTest.java
@@ -0,0 +1,43 @@
+package com.googlesource.gerrit.plugins.manager.repository;
+
+import java.util.Arrays;
+import org.junit.Test;
+import static com.google.common.truth.Truth.assertThat;
+import static com.googlesource.gerrit.plugins.manager.repository.JenkinsCiPluginsRepository.fixPluginNameForMavenBuilds;
+import static com.googlesource.gerrit.plugins.manager.repository.JenkinsCiPluginsRepository.isMavenBuild;
+
+
+// Class, to assist is checking the maven plugin naming functions.
+//
+// - fixPluginNameForMavenBuilds
+// - isMavenBuild.
+//
+public class PluginsCheckMavenNamingTest {
+
+	@Test
+	public void checkIsMavenBuildDetectionTrue(){
+		String [] pluginPathParts = {"target", "ai-code-review-3.1.0.jar"};
+		assertThat(isMavenBuild(pluginPathParts)).isTrue();
+	}
+	@Test
+	public void checkIsMavenBuildDetectionFalse(){
+		String [] pluginPathParts = {"bazel-bin", "plugins", "git-refs-filter.jar"};
+		assertThat(isMavenBuild(pluginPathParts)).isFalse();
+	}
+
+	@Test
+	public void checkMavenBuildNameCorrectionWorks_SimpleName(){
+		String [] pluginPathParts = {"target", "maintainer-3.10.0.jar"};
+		assertThat(isMavenBuild(pluginPathParts)).isTrue();
+		assertThat(fixPluginNameForMavenBuilds(pluginPathParts)).isEqualTo("maintainer");
+	}
+
+	@Test
+	public void checkMavenBuildNameCorrectionWorks_NameWithHyphens(){
+		// This test ensures that we dont get the incorrect name being returned as "ai".
+		String [] pluginPathParts = {"target", "ai-code-review-1.0.0.jar"};
+		assertThat(isMavenBuild(pluginPathParts)).isTrue();
+		assertThat(fixPluginNameForMavenBuilds(pluginPathParts)).isEqualTo("ai-code-review");
+	}
+
+}
